!
function(e, t) {
    "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.zap = t() : e.zap = t()
} (this,
function() {
    return function(e) {
        function t(i) {
            if (n[i]) return n[i].exports;
            var r = n[i] = {
                exports: {},
                id: i,
                loaded: !1
            };
            return e[i].call(r.exports, r, r.exports, t),
            r.loaded = !0,
            r.exports
        }
        var n = {};
        return t.m = e,
        t.c = n,
        t.p = "/",
        t(0)
    } ([function(e, t, n) {
        e.exports = n(50)
    },
    function(e, t) {
        var n = e.exports = {
            version: "2.4.0"
        };
        "number" == typeof __e && (__e = n)
    },
    function(e, t, n) {
        var i = n(40)("wks"),
        r = n(41),
        a = n(4).Symbol,
        o = "function" == typeof a,
        s = e.exports = function(e) {
            return i[e] || (i[e] = o && a[e] || (o ? a: r)("Symbol." + e))
        };
        s.store = i
    },
    function(e, t, n) {
        e.exports = !n(11)(function() {
            return 7 != Object.defineProperty({},
            "a", {
                get: function() {
                    return 7
                }
            }).a
        })
    },
    function(e, t) {
        var n = e.exports = "undefined" != typeof window && window.Math == Math ? window: "undefined" != typeof self && self.Math == Math ? self: Function("return this")();
        "number" == typeof __g && (__g = n)
    },
    function(e, t, n) {
        var i = n(4),
        r = n(1),
        a = n(78),
        o = n(6),
        s = "prototype",
        l = function(e, t, n) {
            var u, f, d, h = e & l.F,
            p = e & l.G,
            c = e & l.S,
            m = e & l.P,
            y = e & l.B,
            g = e & l.W,
            v = p ? r: r[t] || (r[t] = {}),
            _ = v[s],
            w = p ? i: c ? i[t] : (i[t] || {})[s];
            p && (n = t);
            for (u in n) f = !h && w && void 0 !== w[u],
            f && u in v || (d = f ? w[u] : n[u], v[u] = p && "function" != typeof w[u] ? n[u] : y && f ? a(d, i) : g && w[u] == d ?
            function(e) {
                var t = function(t, n, i) {
                    if (this instanceof e) {
                        switch (arguments.length) {
                        case 0:
                            return new e;
                        case 1:
                            return new e(t);
                        case 2:
                            return new e(t, n)
                        }
                        return new e(t, n, i)
                    }
                    return e.apply(this, arguments)
                };
                return t[s] = e[s],
                t
            } (d) : m && "function" == typeof d ? a(Function.call, d) : d, m && ((v.virtual || (v.virtual = {}))[u] = d, e & l.R && _ && !_[u] && o(_, u, d)))
        };
        l.F = 1,
        l.G = 2,
        l.S = 4,
        l.P = 8,
        l.B = 16,
        l.W = 32,
        l.U = 64,
        l.R = 128,
        e.exports = l
    },
    function(e, t, n) {
        var i = n(13),
        r = n(38);
        e.exports = n(3) ?
        function(e, t, n) {
            return i.f(e, t, r(1, n))
        }: function(e, t, n) {
            return e[t] = n,
            e
        }
    },
    function(e, t) {
        e.exports = {}
    },
    function(e, t) {
        "use strict";
        t.__esModule = !0,
        t.
    default = function(e, t) {
            if (! (e instanceof t)) throw new TypeError("Cannot call a class as a function")
        }
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        t.__esModule = !0;
        var r = n(65),
        a = i(r);
        t.
    default = function() {
            function e(e, t) {
                for (var n = 0; n < t.length; n++) {
                    var i = t[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    (0, a.
                default)(e, i.key, i)
                }
            }
            return function(t, n, i) {
                return n && e(t.prototype, n),
                i && e(t, i),
                t
            }
        } ()
    },
    function(e, t, n) {
        var i = n(19);
        e.exports = function(e) {
            if (!i(e)) throw TypeError(e + " is not an object!");
            return e
        }
    },
    function(e, t) {
        e.exports = function(e) {
            try {
                return !! e()
            } catch(e) {
                return ! 0
            }
        }
    },
    function(e, t) {
        var n = {}.hasOwnProperty;
        e.exports = function(e, t) {
            return n.call(e, t)
        }
    },
    function(e, t, n) {
        var i = n(10),
        r = n(80),
        a = n(95),
        o = Object.defineProperty;
        t.f = n(3) ? Object.defineProperty: function(e, t, n) {
            if (i(e), t = a(t, !0), i(n), r) try {
                return o(e, t, n)
            } catch(e) {}
            if ("get" in n || "set" in n) throw TypeError("Accessors not supported!");
            return "value" in n && (e[t] = n.value),
            e
        }
    },
    function(e, t) {
        "use strict";
        var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array;
        t.assign = function(e) {
            for (var t = Array.prototype.slice.call(arguments, 1); t.length;) {
                var n = t.shift();
                if (n) {
                    if ("object" != typeof n) throw new TypeError(n + "must be non-object");
                    for (var i in n) n.hasOwnProperty(i) && (e[i] = n[i])
                }
            }
            return e
        },
        t.shrinkBuf = function(e, t) {
            return e.length === t ? e: e.subarray ? e.subarray(0, t) : (e.length = t, e)
        };
        var i = {
            arraySet: function(e, t, n, i, r) {
                if (t.subarray && e.subarray) return void e.set(t.subarray(n, n + i), r);
                for (var a = 0; a < i; a++) e[r + a] = t[n + a]
            },
            flattenChunks: function(e) {
                var t, n, i, r, a, o;
                for (i = 0, t = 0, n = e.length; t < n; t++) i += e[t].length;
                for (o = new Uint8Array(i), r = 0, t = 0, n = e.length; t < n; t++) a = e[t],
                o.set(a, r),
                r += a.length;
                return o
            }
        },
        r = {
            arraySet: function(e, t, n, i, r) {
                for (var a = 0; a < i; a++) e[r + a] = t[n + a]
            },
            flattenChunks: function(e) {
                return [].concat.apply([], e)
            }
        };
        t.setTyped = function(e) {
            e ? (t.Buf8 = Uint8Array, t.Buf16 = Uint16Array, t.Buf32 = Int32Array, t.assign(t, i)) : (t.Buf8 = Array, t.Buf16 = Array, t.Buf32 = Array, t.assign(t, r))
        },
        t.setTyped(n)
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var r = n(63),
        a = i(r),
        o = n(8),
        s = i(o),
        l = n(9),
        u = i(l),
        f = function() {
            function e(t, n) {
                var i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; (0, s.
            default)(this, e),
                this.key = t,
                this.storage = n || window.localStorage,
                this.cache_ = {},
                this.forceRead_ = i,
                this.reread()
            }
            return (0, u.
        default)(e, [{
                key: "reread",
                value: function() {
                    var e = void 0;
                    try {
                        e = JSON.parse(this.storage.getItem(this.key))
                    } catch(e) {}
                    this.cache_ = e || this.cache_
                }
            },
            {
                key: "sync_",
                value: function() {
                    try {
                        return this.storage.setItem(this.key, (0, a.
                    default)(this.cache_))
                    } catch(e) {}
                }
            },
            {
                key: "get",
                value: function(e) {
                    return this.forceRead_ && this.reread(),
                    this.cache_[e]
                }
            },
            {
                key: "set",
                value: function(e, t) {
                    this.cache_[e] = t,
                    this.sync_()
                }
            },
            {
                key: "remove",
                value: function(e) {
                    delete this.cache_[e],
                    this.sync_()
                }
            },
            {
                key: "clear",
                value: function() {
                    try {
                        return this.storage.removeItem(this.key)
                    } catch(e) {}
                }
            }]),
            e
        } ();
        t.
    default = f
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var r = n(64),
        a = i(r),
        o = {},
        s = ["hash", "href", "pathname", "search", "protocol", "port", "host", "hostname", "origin"].reduce(function(e, t) {
            return e[t] = {
                enumerable: !0,
                configurable: !0,
                get: function() {
                    return window.location[t]
                }
            },
            e
        },
        {}); (0, a.
    default)(o, s),
        t.
    default = o
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.version = void 0;
        var r = n(115),
        a = i(r),
        o = n(107),
        s = i(o),
        l = a.
    default.loadJson(s.
    default),
        u = l.build().com.zhihu.za.proto,
        f = u.$options["(current_log_version)"];
        t.version = f,
        t.
    default = u
    },
    function(e, t) {
        e.exports = function(e) {
            if (void 0 == e) throw TypeError("Can't call method on  " + e);
            return e
        }
    },
    function(e, t) {
        e.exports = function(e) {
            return "object" == typeof e ? null !== e: "function" == typeof e
        }
    },
    function(e, t, n) {
        var i = n(88),
        r = n(34);
        e.exports = Object.keys ||
        function(e) {
            return i(e, r)
        }
    },
    function(e, t, n) {
        var i = n(40)("keys"),
        r = n(41);
        e.exports = function(e) {
            return i[e] || (i[e] = r(e))
        }
    },
    function(e, t) {
        var n = Math.ceil,
        i = Math.floor;
        e.exports = function(e) {
            return isNaN(e = +e) ? 0 : (e > 0 ? i: n)(e)
        }
    },
    function(e, t, n) {
        var i = n(35),
        r = n(18);
        e.exports = function(e) {
            return i(r(e))
        }
    },
    function(e, t, n) {
        var i = n(18);
        e.exports = function(e) {
            return Object(i(e))
        }
    },
    function(e, t) {
        e.exports = function() {
            throw new Error("define cannot be used indirect")
        }
    },
    function(e, t) {
        e.exports = function(e) {
            return e.webpackPolyfill || (e.deprecate = function() {},
            e.paths = [], e.children = [], e.webpackPolyfill = 1),
            e
        }
    },
    function(e, t) {
        "use strict";
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var n = navigator.userAgent;
        t.
    default = {
            UA: n,
            Mobile: /Mobile/.test(n),
            Android: /Android/.test(n)
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(71),
            __esModule: !0
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(74),
            __esModule: !0
        }
    },
    function(e, t, n) {
        var i, r, a; (function(e) {
            /**
	 * @license bytebuffer.js (c) 2015 Daniel Wirtz <dcode@dcode.io>
	 * Backing buffer: ArrayBuffer, Accessor: Uint8Array
	 * Released under the Apache License, Version 2.0
	 * see: https://github.com/dcodeIO/bytebuffer.js for details
	 */
            !
            function(o, s) {
                n(25).amd ? (r = [n(44)], i = s, a = "function" == typeof i ? i.apply(t, r) : i, !(void 0 !== a && (e.exports = a))) : "object" == typeof e && e && e.exports ? e.exports = function() {
                    var e;
                    try {
                        e = n(44)
                    } catch(e) {}
                    return s(e)
                } () : (o.dcodeIO = o.dcodeIO || {}).ByteBuffer = s(o.dcodeIO.Long)
            } (this,
            function(e) {
                "use strict";
                function t(e) {
                    var t = 0;
                    return function() {
                        return t < e.length ? e.charCodeAt(t++) : null
                    }
                }
                function n() {
                    var e = [],
                    t = [];
                    return function() {
                        return 0 === arguments.length ? t.join("") + l.apply(String, e) : (e.length + arguments.length > 1024 && (t.push(l.apply(String, e)), e.length = 0), void Array.prototype.push.apply(e, arguments))
                    }
                }
                function i(e, t, n, i, r) {
                    var a, o, s = 8 * r - i - 1,
                    l = (1 << s) - 1,
                    u = l >> 1,
                    f = -7,
                    d = n ? r - 1 : 0,
                    h = n ? -1 : 1,
                    p = e[t + d];
                    for (d += h, a = p & (1 << -f) - 1, p >>= -f, f += s; f > 0; a = 256 * a + e[t + d], d += h, f -= 8);
                    for (o = a & (1 << -f) - 1, a >>= -f, f += i; f > 0; o = 256 * o + e[t + d], d += h, f -= 8);
                    if (0 === a) a = 1 - u;
                    else {
                        if (a === l) return o ? NaN: (p ? -1 : 1) * (1 / 0);
                        o += Math.pow(2, i),
                        a -= u
                    }
                    return (p ? -1 : 1) * o * Math.pow(2, a - i)
                }
                function r(e, t, n, i, r, a) {
                    var o, s, l, u = 8 * a - r - 1,
                    f = (1 << u) - 1,
                    d = f >> 1,
                    h = 23 === r ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
                    p = i ? 0 : a - 1,
                    c = i ? 1 : -1,
                    m = t < 0 || 0 === t && 1 / t < 0 ? 1 : 0;
                    for (t = Math.abs(t), isNaN(t) || t === 1 / 0 ? (s = isNaN(t) ? 1 : 0, o = f) : (o = Math.floor(Math.log(t) / Math.LN2), t * (l = Math.pow(2, -o)) < 1 && (o--, l *= 2), t += o + d >= 1 ? h / l: h * Math.pow(2, 1 - d), t * l >= 2 && (o++, l /= 2), o + d >= f ? (s = 0, o = f) : o + d >= 1 ? (s = (t * l - 1) * Math.pow(2, r), o += d) : (s = t * Math.pow(2, d - 1) * Math.pow(2, r), o = 0)); r >= 8; e[n + p] = 255 & s, p += c, s /= 256, r -= 8);
                    for (o = o << r | s, u += r; u > 0; e[n + p] = 255 & o, p += c, o /= 256, u -= 8);
                    e[n + p - c] |= 128 * m
                }
                var a = function(e, t, n) {
                    if ("undefined" == typeof e && (e = a.DEFAULT_CAPACITY), "undefined" == typeof t && (t = a.DEFAULT_ENDIAN), "undefined" == typeof n && (n = a.DEFAULT_NOASSERT), !n) {
                        if (e |= 0, e < 0) throw RangeError("Illegal capacity");
                        t = !!t,
                        n = !!n
                    }
                    this.buffer = 0 === e ? s: new ArrayBuffer(e),
                    this.view = 0 === e ? null: new Uint8Array(this.buffer),
                    this.offset = 0,
                    this.markedOffset = -1,
                    this.limit = e,
                    this.littleEndian = t,
                    this.noAssert = n
                };
                a.VERSION = "5.0.1",
                a.LITTLE_ENDIAN = !0,
                a.BIG_ENDIAN = !1,
                a.DEFAULT_CAPACITY = 16,
                a.DEFAULT_ENDIAN = a.BIG_ENDIAN,
                a.DEFAULT_NOASSERT = !1,
                a.Long = e || null;
                var o = a.prototype;
                o.__isByteBuffer__,
                Object.defineProperty(o, "__isByteBuffer__", {
                    value: !0,
                    enumerable: !1,
                    configurable: !1
                });
                var s = new ArrayBuffer(0),
                l = String.fromCharCode;
                a.accessor = function() {
                    return Uint8Array
                },
                a.allocate = function(e, t, n) {
                    return new a(e, t, n)
                },
                a.concat = function(e, t, n, i) {
                    "boolean" != typeof t && "string" == typeof t || (i = n, n = t, t = void 0);
                    for (var r, o = 0,
                    s = 0,
                    l = e.length; s < l; ++s) a.isByteBuffer(e[s]) || (e[s] = a.wrap(e[s], t)),
                    r = e[s].limit - e[s].offset,
                    r > 0 && (o += r);
                    if (0 === o) return new a(0, n, i);
                    var u, f = new a(o, n, i);
                    for (s = 0; s < l;) u = e[s++],
                    r = u.limit - u.offset,
                    r <= 0 || (f.view.set(u.view.subarray(u.offset, u.limit), f.offset), f.offset += r);
                    return f.limit = f.offset,
                    f.offset = 0,
                    f
                },
                a.isByteBuffer = function(e) {
                    return (e && e.__isByteBuffer__) === !0
                },
                a.type = function() {
                    return ArrayBuffer
                },
                a.wrap = function(e, t, n, i) {
                    if ("string" != typeof t && (i = n, n = t, t = void 0), "string" == typeof e) switch ("undefined" == typeof t && (t = "utf8"), t) {
                    case "base64":
                        return a.fromBase64(e, n);
                    case "hex":
                        return a.fromHex(e, n);
                    case "binary":
                        return a.fromBinary(e, n);
                    case "utf8":
                        return a.fromUTF8(e, n);
                    case "debug":
                        return a.fromDebug(e, n);
                    default:
                        throw Error("Unsupported encoding: " + t)
                    }
                    if (null === e || "object" != typeof e) throw TypeError("Illegal buffer");
                    var r;
                    if (a.isByteBuffer(e)) return r = o.clone.call(e),
                    r.markedOffset = -1,
                    r;
                    if (e instanceof Uint8Array) r = new a(0, n, i),
                    e.length > 0 && (r.buffer = e.buffer, r.offset = e.byteOffset, r.limit = e.byteOffset + e.byteLength, r.view = new Uint8Array(e.buffer));
                    else if (e instanceof ArrayBuffer) r = new a(0, n, i),
                    e.byteLength > 0 && (r.buffer = e, r.offset = 0, r.limit = e.byteLength, r.view = e.byteLength > 0 ? new Uint8Array(e) : null);
                    else {
                        if ("[object Array]" !== Object.prototype.toString.call(e)) throw TypeError("Illegal buffer");
                        r = new a(e.length, n, i),
                        r.limit = e.length;
                        for (var s = 0; s < e.length; ++s) r.view[s] = e[s]
                    }
                    return r
                },
                o.writeBitSet = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if (! (e instanceof Array)) throw TypeError("Illegal BitSet: Not an array");
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    var i, r = t,
                    a = e.length,
                    o = a >> 3,
                    s = 0;
                    for (t += this.writeVarint32(a, t); o--;) i = 1 & !!e[s++] | (1 & !!e[s++]) << 1 | (1 & !!e[s++]) << 2 | (1 & !!e[s++]) << 3 | (1 & !!e[s++]) << 4 | (1 & !!e[s++]) << 5 | (1 & !!e[s++]) << 6 | (1 & !!e[s++]) << 7,
                    this.writeByte(i, t++);
                    if (s < a) {
                        var l = 0;
                        for (i = 0; s < a;) i |= (1 & !!e[s++]) << l++;
                        this.writeByte(i, t++)
                    }
                    return n ? (this.offset = t, this) : t - r
                },
                o.readBitSet = function(e) {
                    var t = "undefined" == typeof e;
                    t && (e = this.offset);
                    var n, i = this.readVarint32(e),
                    r = i.value,
                    a = r >> 3,
                    o = 0,
                    s = [];
                    for (e += i.length; a--;) n = this.readByte(e++),
                    s[o++] = !!(1 & n),
                    s[o++] = !!(2 & n),
                    s[o++] = !!(4 & n),
                    s[o++] = !!(8 & n),
                    s[o++] = !!(16 & n),
                    s[o++] = !!(32 & n),
                    s[o++] = !!(64 & n),
                    s[o++] = !!(128 & n);
                    if (o < r) {
                        var l = 0;
                        for (n = this.readByte(e++); o < r;) s[o++] = !!(n >> l++&1)
                    }
                    return t && (this.offset = e),
                    s
                },
                o.readBytes = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + e > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+" + e + ") <= " + this.buffer.byteLength)
                    }
                    var i = this.slice(t, t + e);
                    return n && (this.offset += e),
                    i
                },
                o.writeBytes = o.append,
                o.writeInt8 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 1;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 1,
                    this.view[t] = e,
                    n && (this.offset += 1),
                    this
                },
                o.writeByte = o.writeInt8,
                o.readInt8 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+1) <= " + this.buffer.byteLength)
                    }
                    var n = this.view[e];
                    return 128 === (128 & n) && (n = -(255 - n + 1)),
                    t && (this.offset += 1),
                    n
                },
                o.readByte = o.readInt8,
                o.writeUint8 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 1;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 1,
                    this.view[t] = e,
                    n && (this.offset += 1),
                    this
                },
                o.writeUInt8 = o.writeUint8,
                o.readUint8 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+1) <= " + this.buffer.byteLength)
                    }
                    var n = this.view[e];
                    return t && (this.offset += 1),
                    n
                },
                o.readUInt8 = o.readUint8,
                o.writeInt16 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 2;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 2,
                    this.littleEndian ? (this.view[t + 1] = (65280 & e) >>> 8, this.view[t] = 255 & e) : (this.view[t] = (65280 & e) >>> 8, this.view[t + 1] = 255 & e),
                    n && (this.offset += 2),
                    this
                },
                o.writeShort = o.writeInt16,
                o.readInt16 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 2 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+2) <= " + this.buffer.byteLength)
                    }
                    var n = 0;
                    return this.littleEndian ? (n = this.view[e], n |= this.view[e + 1] << 8) : (n = this.view[e] << 8, n |= this.view[e + 1]),
                    32768 === (32768 & n) && (n = -(65535 - n + 1)),
                    t && (this.offset += 2),
                    n
                },
                o.readShort = o.readInt16,
                o.writeUint16 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 2;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 2,
                    this.littleEndian ? (this.view[t + 1] = (65280 & e) >>> 8, this.view[t] = 255 & e) : (this.view[t] = (65280 & e) >>> 8, this.view[t + 1] = 255 & e),
                    n && (this.offset += 2),
                    this
                },
                o.writeUInt16 = o.writeUint16,
                o.readUint16 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 2 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+2) <= " + this.buffer.byteLength)
                    }
                    var n = 0;
                    return this.littleEndian ? (n = this.view[e], n |= this.view[e + 1] << 8) : (n = this.view[e] << 8, n |= this.view[e + 1]),
                    t && (this.offset += 2),
                    n
                },
                o.readUInt16 = o.readUint16,
                o.writeInt32 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 4;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 4,
                    this.littleEndian ? (this.view[t + 3] = e >>> 24 & 255, this.view[t + 2] = e >>> 16 & 255, this.view[t + 1] = e >>> 8 & 255, this.view[t] = 255 & e) : (this.view[t] = e >>> 24 & 255, this.view[t + 1] = e >>> 16 & 255, this.view[t + 2] = e >>> 8 & 255, this.view[t + 3] = 255 & e),
                    n && (this.offset += 4),
                    this
                },
                o.writeInt = o.writeInt32,
                o.readInt32 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+4) <= " + this.buffer.byteLength)
                    }
                    var n = 0;
                    return this.littleEndian ? (n = this.view[e + 2] << 16, n |= this.view[e + 1] << 8, n |= this.view[e], n += this.view[e + 3] << 24 >>> 0) : (n = this.view[e + 1] << 16, n |= this.view[e + 2] << 8, n |= this.view[e + 3], n += this.view[e] << 24 >>> 0),
                    n |= 0,
                    t && (this.offset += 4),
                    n
                },
                o.readInt = o.readInt32,
                o.writeUint32 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 4;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 4,
                    this.littleEndian ? (this.view[t + 3] = e >>> 24 & 255, this.view[t + 2] = e >>> 16 & 255, this.view[t + 1] = e >>> 8 & 255, this.view[t] = 255 & e) : (this.view[t] = e >>> 24 & 255, this.view[t + 1] = e >>> 16 & 255, this.view[t + 2] = e >>> 8 & 255, this.view[t + 3] = 255 & e),
                    n && (this.offset += 4),
                    this
                },
                o.writeUInt32 = o.writeUint32,
                o.readUint32 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+4) <= " + this.buffer.byteLength)
                    }
                    var n = 0;
                    return this.littleEndian ? (n = this.view[e + 2] << 16, n |= this.view[e + 1] << 8, n |= this.view[e], n += this.view[e + 3] << 24 >>> 0) : (n = this.view[e + 1] << 16, n |= this.view[e + 2] << 8, n |= this.view[e + 3], n += this.view[e] << 24 >>> 0),
                    t && (this.offset += 4),
                    n
                },
                o.readUInt32 = o.readUint32,
                e && (o.writeInt64 = function(t, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" == typeof t) t = e.fromNumber(t);
                        else if ("string" == typeof t) t = e.fromString(t);
                        else if (! (t && t instanceof e)) throw TypeError("Illegal value: " + t + " (not an integer or Long)");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    "number" == typeof t ? t = e.fromNumber(t) : "string" == typeof t && (t = e.fromString(t)),
                    n += 8;
                    var r = this.buffer.byteLength;
                    n > r && this.resize((r *= 2) > n ? r: n),
                    n -= 8;
                    var a = t.low,
                    o = t.high;
                    return this.littleEndian ? (this.view[n + 3] = a >>> 24 & 255, this.view[n + 2] = a >>> 16 & 255, this.view[n + 1] = a >>> 8 & 255, this.view[n] = 255 & a, n += 4, this.view[n + 3] = o >>> 24 & 255, this.view[n + 2] = o >>> 16 & 255, this.view[n + 1] = o >>> 8 & 255, this.view[n] = 255 & o) : (this.view[n] = o >>> 24 & 255, this.view[n + 1] = o >>> 16 & 255, this.view[n + 2] = o >>> 8 & 255, this.view[n + 3] = 255 & o, n += 4, this.view[n] = a >>> 24 & 255, this.view[n + 1] = a >>> 16 & 255, this.view[n + 2] = a >>> 8 & 255, this.view[n + 3] = 255 & a),
                    i && (this.offset += 8),
                    this
                },
                o.writeLong = o.writeInt64, o.readInt64 = function(t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+8) <= " + this.buffer.byteLength)
                    }
                    var i = 0,
                    r = 0;
                    this.littleEndian ? (i = this.view[t + 2] << 16, i |= this.view[t + 1] << 8, i |= this.view[t], i += this.view[t + 3] << 24 >>> 0, t += 4, r = this.view[t + 2] << 16, r |= this.view[t + 1] << 8, r |= this.view[t], r += this.view[t + 3] << 24 >>> 0) : (r = this.view[t + 1] << 16, r |= this.view[t + 2] << 8, r |= this.view[t + 3], r += this.view[t] << 24 >>> 0, t += 4, i = this.view[t + 1] << 16, i |= this.view[t + 2] << 8, i |= this.view[t + 3], i += this.view[t] << 24 >>> 0);
                    var a = new e(i, r, !1);
                    return n && (this.offset += 8),
                    a
                },
                o.readLong = o.readInt64, o.writeUint64 = function(t, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" == typeof t) t = e.fromNumber(t);
                        else if ("string" == typeof t) t = e.fromString(t);
                        else if (! (t && t instanceof e)) throw TypeError("Illegal value: " + t + " (not an integer or Long)");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    "number" == typeof t ? t = e.fromNumber(t) : "string" == typeof t && (t = e.fromString(t)),
                    n += 8;
                    var r = this.buffer.byteLength;
                    n > r && this.resize((r *= 2) > n ? r: n),
                    n -= 8;
                    var a = t.low,
                    o = t.high;
                    return this.littleEndian ? (this.view[n + 3] = a >>> 24 & 255, this.view[n + 2] = a >>> 16 & 255, this.view[n + 1] = a >>> 8 & 255, this.view[n] = 255 & a, n += 4, this.view[n + 3] = o >>> 24 & 255, this.view[n + 2] = o >>> 16 & 255, this.view[n + 1] = o >>> 8 & 255, this.view[n] = 255 & o) : (this.view[n] = o >>> 24 & 255, this.view[n + 1] = o >>> 16 & 255, this.view[n + 2] = o >>> 8 & 255, this.view[n + 3] = 255 & o, n += 4, this.view[n] = a >>> 24 & 255, this.view[n + 1] = a >>> 16 & 255, this.view[n + 2] = a >>> 8 & 255, this.view[n + 3] = 255 & a),
                    i && (this.offset += 8),
                    this
                },
                o.writeUInt64 = o.writeUint64, o.readUint64 = function(t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+8) <= " + this.buffer.byteLength)
                    }
                    var i = 0,
                    r = 0;
                    this.littleEndian ? (i = this.view[t + 2] << 16, i |= this.view[t + 1] << 8, i |= this.view[t], i += this.view[t + 3] << 24 >>> 0, t += 4, r = this.view[t + 2] << 16, r |= this.view[t + 1] << 8, r |= this.view[t], r += this.view[t + 3] << 24 >>> 0) : (r = this.view[t + 1] << 16, r |= this.view[t + 2] << 8, r |= this.view[t + 3], r += this.view[t] << 24 >>> 0, t += 4, i = this.view[t + 1] << 16, i |= this.view[t + 2] << 8, i |= this.view[t + 3], i += this.view[t] << 24 >>> 0);
                    var a = new e(i, r, !0);
                    return n && (this.offset += 8),
                    a
                },
                o.readUInt64 = o.readUint64),
                o.writeFloat32 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e) throw TypeError("Illegal value: " + e + " (not a number)");
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 4;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 4,
                    r(this.view, e, t, this.littleEndian, 23, 4),
                    n && (this.offset += 4),
                    this
                },
                o.writeFloat = o.writeFloat32,
                o.readFloat32 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+4) <= " + this.buffer.byteLength)
                    }
                    var n = i(this.view, e, this.littleEndian, 23, 4);
                    return t && (this.offset += 4),
                    n
                },
                o.readFloat = o.readFloat32,
                o.writeFloat64 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e) throw TypeError("Illegal value: " + e + " (not a number)");
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    t += 8;
                    var i = this.buffer.byteLength;
                    return t > i && this.resize((i *= 2) > t ? i: t),
                    t -= 8,
                    r(this.view, e, t, this.littleEndian, 52, 8),
                    n && (this.offset += 8),
                    this
                },
                o.writeDouble = o.writeFloat64,
                o.readFloat64 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 8 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+8) <= " + this.buffer.byteLength)
                    }
                    var n = i(this.view, e, this.littleEndian, 52, 8);
                    return t && (this.offset += 8),
                    n
                },
                o.readDouble = o.readFloat64,
                a.MAX_VARINT32_BYTES = 5,
                a.calculateVarint32 = function(e) {
                    return e >>>= 0,
                    e < 128 ? 1 : e < 16384 ? 2 : e < 1 << 21 ? 3 : e < 1 << 28 ? 4 : 5
                },
                a.zigZagEncode32 = function(e) {
                    return ((e |= 0) << 1 ^ e >> 31) >>> 0
                },
                a.zigZagDecode32 = function(e) {
                    return e >>> 1 ^ -(1 & e) | 0
                },
                o.writeVarint32 = function(e, t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+0) <= " + this.buffer.byteLength)
                    }
                    var i, r = a.calculateVarint32(e);
                    t += r;
                    var o = this.buffer.byteLength;
                    for (t > o && this.resize((o *= 2) > t ? o: t), t -= r, e >>>= 0; e >= 128;) i = 127 & e | 128,
                    this.view[t++] = i,
                    e >>>= 7;
                    return this.view[t++] = e,
                    n ? (this.offset = t, this) : r
                },
                o.writeVarint32ZigZag = function(e, t) {
                    return this.writeVarint32(a.zigZagEncode32(e), t)
                },
                o.readVarint32 = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+1) <= " + this.buffer.byteLength)
                    }
                    var n, i = 0,
                    r = 0;
                    do {
                        if (!this.noAssert && e > this.limit) {
                            var a = Error("Truncated");
                            throw a.truncated = !0,
                            a
                        }
                        n = this.view[e++], i < 5 && (r |= (127 & n) << 7 * i), ++i
                    } while ( 0 !== ( 128 & n ));
                    return r |= 0,
                    t ? (this.offset = e, r) : {
                        value: r,
                        length: i
                    }
                },
                o.readVarint32ZigZag = function(e) {
                    var t = this.readVarint32(e);
                    return "object" == typeof t ? t.value = a.zigZagDecode32(t.value) : t = a.zigZagDecode32(t),
                    t
                },
                e && (a.MAX_VARINT64_BYTES = 10, a.calculateVarint64 = function(t) {
                    "number" == typeof t ? t = e.fromNumber(t) : "string" == typeof t && (t = e.fromString(t));
                    var n = t.toInt() >>> 0,
                    i = t.shiftRightUnsigned(28).toInt() >>> 0,
                    r = t.shiftRightUnsigned(56).toInt() >>> 0;
                    return 0 == r ? 0 == i ? n < 16384 ? n < 128 ? 1 : 2 : n < 1 << 21 ? 3 : 4 : i < 16384 ? i < 128 ? 5 : 6 : i < 1 << 21 ? 7 : 8 : r < 128 ? 9 : 10
                },
                a.zigZagEncode64 = function(t) {
                    return "number" == typeof t ? t = e.fromNumber(t, !1) : "string" == typeof t ? t = e.fromString(t, !1) : t.unsigned !== !1 && (t = t.toSigned()),
                    t.shiftLeft(1).xor(t.shiftRight(63)).toUnsigned()
                },
                a.zigZagDecode64 = function(t) {
                    return "number" == typeof t ? t = e.fromNumber(t, !1) : "string" == typeof t ? t = e.fromString(t, !1) : t.unsigned !== !1 && (t = t.toSigned()),
                    t.shiftRightUnsigned(1).xor(t.and(e.ONE).toSigned().negate()).toSigned()
                },
                o.writeVarint64 = function(t, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" == typeof t) t = e.fromNumber(t);
                        else if ("string" == typeof t) t = e.fromString(t);
                        else if (! (t && t instanceof e)) throw TypeError("Illegal value: " + t + " (not an integer or Long)");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    "number" == typeof t ? t = e.fromNumber(t, !1) : "string" == typeof t ? t = e.fromString(t, !1) : t.unsigned !== !1 && (t = t.toSigned());
                    var r = a.calculateVarint64(t),
                    o = t.toInt() >>> 0,
                    s = t.shiftRightUnsigned(28).toInt() >>> 0,
                    l = t.shiftRightUnsigned(56).toInt() >>> 0;
                    n += r;
                    var u = this.buffer.byteLength;
                    switch (n > u && this.resize((u *= 2) > n ? u: n), n -= r, r) {
                    case 10:
                        this.view[n + 9] = l >>> 7 & 1;
                    case 9:
                        this.view[n + 8] = 9 !== r ? 128 | l: 127 & l;
                    case 8:
                        this.view[n + 7] = 8 !== r ? s >>> 21 | 128 : s >>> 21 & 127;
                    case 7:
                        this.view[n + 6] = 7 !== r ? s >>> 14 | 128 : s >>> 14 & 127;
                    case 6:
                        this.view[n + 5] = 6 !== r ? s >>> 7 | 128 : s >>> 7 & 127;
                    case 5:
                        this.view[n + 4] = 5 !== r ? 128 | s: 127 & s;
                    case 4:
                        this.view[n + 3] = 4 !== r ? o >>> 21 | 128 : o >>> 21 & 127;
                    case 3:
                        this.view[n + 2] = 3 !== r ? o >>> 14 | 128 : o >>> 14 & 127;
                    case 2:
                        this.view[n + 1] = 2 !== r ? o >>> 7 | 128 : o >>> 7 & 127;
                    case 1:
                        this.view[n] = 1 !== r ? 128 | o: 127 & o
                    }
                    return i ? (this.offset += r, this) : r
                },
                o.writeVarint64ZigZag = function(e, t) {
                    return this.writeVarint64(a.zigZagEncode64(e), t)
                },
                o.readVarint64 = function(t) {
                    var n = "undefined" == typeof t;
                    if (n && (t = this.offset), !this.noAssert) {
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: " + t + " (not an integer)");
                        if (t >>>= 0, t < 0 || t + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + t + " (+1) <= " + this.buffer.byteLength)
                    }
                    var i = t,
                    r = 0,
                    a = 0,
                    o = 0,
                    s = 0;
                    if (s = this.view[t++], r = 127 & s, 128 & s && (s = this.view[t++], r |= (127 & s) << 7, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], r |= (127 & s) << 14, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], r |= (127 & s) << 21, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], a = 127 & s, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], a |= (127 & s) << 7, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], a |= (127 & s) << 14, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], a |= (127 & s) << 21, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], o = 127 & s, (128 & s || this.noAssert && "undefined" == typeof s) && (s = this.view[t++], o |= (127 & s) << 7, 128 & s || this.noAssert && "undefined" == typeof s)))))))))) throw Error("Buffer overrun");
                    var l = e.fromBits(r | a << 28, a >>> 4 | o << 24, !1);
                    return n ? (this.offset = t, l) : {
                        value: l,
                        length: t - i
                    }
                },
                o.readVarint64ZigZag = function(t) {
                    var n = this.readVarint64(t);
                    return n && n.value instanceof e ? n.value = a.zigZagDecode64(n.value) : n = a.zigZagDecode64(n),
                    n
                }),
                o.writeCString = function(e, n) {
                    var i = "undefined" == typeof n;
                    i && (n = this.offset);
                    var r, a = e.length;
                    if (!this.noAssert) {
                        if ("string" != typeof e) throw TypeError("Illegal str: Not a string");
                        for (r = 0; r < a; ++r) if (0 === e.charCodeAt(r)) throw RangeError("Illegal str: Contains NULL-characters");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    a = f.calculateUTF16asUTF8(t(e))[1],
                    n += a + 1;
                    var o = this.buffer.byteLength;
                    return n > o && this.resize((o *= 2) > n ? o: n),
                    n -= a + 1,
                    f.encodeUTF16toUTF8(t(e),
                    function(e) {
                        this.view[n++] = e
                    }.bind(this)),
                    this.view[n++] = 0,
                    i ? (this.offset = n, this) : a
                },
                o.readCString = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+1) <= " + this.buffer.byteLength)
                    }
                    var i, r = e,
                    a = -1;
                    return f.decodeUTF8toUTF16(function() {
                        if (0 === a) return null;
                        if (e >= this.limit) throw RangeError("Illegal range: Truncated data, " + e + " < " + this.limit);
                        return a = this.view[e++],
                        0 === a ? null: a
                    }.bind(this), i = n(), !0),
                    t ? (this.offset = e, i()) : {
                        string: i(),
                        length: e - r
                    }
                },
                o.writeIString = function(e, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("string" != typeof e) throw TypeError("Illegal str: Not a string");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    var r, a = n;
                    r = f.calculateUTF16asUTF8(t(e), this.noAssert)[1],
                    n += 4 + r;
                    var o = this.buffer.byteLength;
                    if (n > o && this.resize((o *= 2) > n ? o: n), n -= 4 + r, this.littleEndian ? (this.view[n + 3] = r >>> 24 & 255, this.view[n + 2] = r >>> 16 & 255, this.view[n + 1] = r >>> 8 & 255, this.view[n] = 255 & r) : (this.view[n] = r >>> 24 & 255, this.view[n + 1] = r >>> 16 & 255, this.view[n + 2] = r >>> 8 & 255, this.view[n + 3] = 255 & r), n += 4, f.encodeUTF16toUTF8(t(e),
                    function(e) {
                        this.view[n++] = e
                    }.bind(this)), n !== a + 4 + r) throw RangeError("Illegal range: Truncated data, " + n + " == " + (n + 4 + r));
                    return i ? (this.offset = n, this) : n - a
                },
                o.readIString = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 4 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+4) <= " + this.buffer.byteLength)
                    }
                    var n = e,
                    i = this.readUint32(e),
                    r = this.readUTF8String(i, a.METRICS_BYTES, e += 4);
                    return e += r.length,
                    t ? (this.offset = e, r.string) : {
                        string: r.string,
                        length: e - n
                    }
                },
                a.METRICS_CHARS = "c",
                a.METRICS_BYTES = "b",
                o.writeUTF8String = function(e, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    var r, a = n;
                    r = f.calculateUTF16asUTF8(t(e))[1],
                    n += r;
                    var o = this.buffer.byteLength;
                    return n > o && this.resize((o *= 2) > n ? o: n),
                    n -= r,
                    f.encodeUTF16toUTF8(t(e),
                    function(e) {
                        this.view[n++] = e
                    }.bind(this)),
                    i ? (this.offset = n, this) : n - a
                },
                o.writeString = o.writeUTF8String,
                a.calculateUTF8Chars = function(e) {
                    return f.calculateUTF16asUTF8(t(e))[0]
                },
                a.calculateUTF8Bytes = function(e) {
                    return f.calculateUTF16asUTF8(t(e))[1]
                },
                a.calculateString = a.calculateUTF8Bytes,
                o.readUTF8String = function(e, t, i) {
                    "number" == typeof t && (i = t, t = void 0);
                    var r = "undefined" == typeof i;
                    if (r && (i = this.offset), "undefined" == typeof t && (t = a.METRICS_CHARS), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal length: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof i || i % 1 !== 0) throw TypeError("Illegal offset: " + i + " (not an integer)");
                        if (i >>>= 0, i < 0 || i + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + i + " (+0) <= " + this.buffer.byteLength)
                    }
                    var o, s = 0,
                    l = i;
                    if (t === a.METRICS_CHARS) {
                        if (o = n(), f.decodeUTF8(function() {
                            return s < e && i < this.limit ? this.view[i++] : null
                        }.bind(this),
                        function(e) {++s,
                            f.UTF8toUTF16(e, o)
                        }), s !== e) throw RangeError("Illegal range: Truncated data, " + s + " == " + e);
                        return r ? (this.offset = i, o()) : {
                            string: o(),
                            length: i - l
                        }
                    }
                    if (t === a.METRICS_BYTES) {
                        if (!this.noAssert) {
                            if ("number" != typeof i || i % 1 !== 0) throw TypeError("Illegal offset: " + i + " (not an integer)");
                            if (i >>>= 0, i < 0 || i + e > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + i + " (+" + e + ") <= " + this.buffer.byteLength)
                        }
                        var u = i + e;
                        if (f.decodeUTF8toUTF16(function() {
                            return i < u ? this.view[i++] : null
                        }.bind(this), o = n(), this.noAssert), i !== u) throw RangeError("Illegal range: Truncated data, " + i + " == " + u);
                        return r ? (this.offset = i, o()) : {
                            string: o(),
                            length: i - l
                        }
                    }
                    throw TypeError("Unsupported metrics: " + t)
                },
                o.readString = o.readUTF8String,
                o.writeVString = function(e, n) {
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("string" != typeof e) throw TypeError("Illegal str: Not a string");
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    var r, o, s = n;
                    r = f.calculateUTF16asUTF8(t(e), this.noAssert)[1],
                    o = a.calculateVarint32(r),
                    n += o + r;
                    var l = this.buffer.byteLength;
                    if (n > l && this.resize((l *= 2) > n ? l: n), n -= o + r, n += this.writeVarint32(r, n), f.encodeUTF16toUTF8(t(e),
                    function(e) {
                        this.view[n++] = e
                    }.bind(this)), n !== s + r + o) throw RangeError("Illegal range: Truncated data, " + n + " == " + (n + r + o));
                    return i ? (this.offset = n, this) : n - s
                },
                o.readVString = function(e) {
                    var t = "undefined" == typeof e;
                    if (t && (e = this.offset), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 1 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+1) <= " + this.buffer.byteLength)
                    }
                    var n = e,
                    i = this.readVarint32(e),
                    r = this.readUTF8String(i.value, a.METRICS_BYTES, e += i.length);
                    return e += r.length,
                    t ? (this.offset = e, r.string) : {
                        string: r.string,
                        length: e - n
                    }
                },
                o.append = function(e, t, n) {
                    "number" != typeof t && "string" == typeof t || (n = t, t = void 0);
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    e instanceof a || (e = a.wrap(e, t));
                    var r = e.limit - e.offset;
                    if (r <= 0) return this;
                    n += r;
                    var o = this.buffer.byteLength;
                    return n > o && this.resize((o *= 2) > n ? o: n),
                    n -= r,
                    this.view.set(e.view.subarray(e.offset, e.limit), n),
                    e.offset += r,
                    i && (this.offset += r),
                    this
                },
                o.appendTo = function(e, t) {
                    return e.append(this, t),
                    this
                },
                o.assert = function(e) {
                    return this.noAssert = !e,
                    this
                },
                o.capacity = function() {
                    return this.buffer.byteLength
                },
                o.clear = function() {
                    return this.offset = 0,
                    this.limit = this.buffer.byteLength,
                    this.markedOffset = -1,
                    this
                },
                o.clone = function(e) {
                    var t = new a(0, this.littleEndian, this.noAssert);
                    return e ? (t.buffer = new ArrayBuffer(this.buffer.byteLength), t.view = new Uint8Array(t.buffer)) : (t.buffer = this.buffer, t.view = this.view),
                    t.offset = this.offset,
                    t.markedOffset = this.markedOffset,
                    t.limit = this.limit,
                    t
                },
                o.compact = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    if (0 === e && t === this.buffer.byteLength) return this;
                    var n = t - e;
                    if (0 === n) return this.buffer = s,
                    this.view = null,
                    this.markedOffset >= 0 && (this.markedOffset -= e),
                    this.offset = 0,
                    this.limit = 0,
                    this;
                    var i = new ArrayBuffer(n),
                    r = new Uint8Array(i);
                    return r.set(this.view.subarray(e, t)),
                    this.buffer = i,
                    this.view = r,
                    this.markedOffset >= 0 && (this.markedOffset -= e),
                    this.offset = 0,
                    this.limit = n,
                    this
                },
                o.copy = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    if (e === t) return new a(0, this.littleEndian, this.noAssert);
                    var n = t - e,
                    i = new a(n, this.littleEndian, this.noAssert);
                    return i.offset = 0,
                    i.limit = n,
                    i.markedOffset >= 0 && (i.markedOffset -= e),
                    this.copyTo(i, 0, e, t),
                    i
                },
                o.copyTo = function(e, t, n, i) {
                    var r, o;
                    if (!this.noAssert && !a.isByteBuffer(e)) throw TypeError("Illegal target: Not a ByteBuffer");
                    if (t = (o = "undefined" == typeof t) ? e.offset: 0 | t, n = (r = "undefined" == typeof n) ? this.offset: 0 | n, i = "undefined" == typeof i ? this.limit: 0 | i, t < 0 || t > e.buffer.byteLength) throw RangeError("Illegal target range: 0 <= " + t + " <= " + e.buffer.byteLength);
                    if (n < 0 || i > this.buffer.byteLength) throw RangeError("Illegal source range: 0 <= " + n + " <= " + this.buffer.byteLength);
                    var s = i - n;
                    return 0 === s ? e: (e.ensureCapacity(t + s), e.view.set(this.view.subarray(n, i), t), r && (this.offset += s), o && (e.offset += s), this)
                },
                o.ensureCapacity = function(e) {
                    var t = this.buffer.byteLength;
                    return t < e ? this.resize((t *= 2) > e ? t: e) : this
                },
                o.fill = function(e, t, n) {
                    var i = "undefined" == typeof t;
                    if (i && (t = this.offset), "string" == typeof e && e.length > 0 && (e = e.charCodeAt(0)), "undefined" == typeof t && (t = this.offset), "undefined" == typeof n && (n = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal value: " + e + " (not an integer)");
                        if (e |= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (t >>>= 0, "number" != typeof n || n % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (n >>>= 0, t < 0 || t > n || n > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + t + " <= " + n + " <= " + this.buffer.byteLength)
                    }
                    if (t >= n) return this;
                    for (; t < n;) this.view[t++] = e;
                    return i && (this.offset = t),
                    this
                },
                o.flip = function() {
                    return this.limit = this.offset,
                    this.offset = 0,
                    this
                },
                o.mark = function(e) {
                    if (e = "undefined" == typeof e ? this.offset: e, !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal offset: " + e + " (not an integer)");
                        if (e >>>= 0, e < 0 || e + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + e + " (+0) <= " + this.buffer.byteLength)
                    }
                    return this.markedOffset = e,
                    this
                },
                o.order = function(e) {
                    if (!this.noAssert && "boolean" != typeof e) throw TypeError("Illegal littleEndian: Not a boolean");
                    return this.littleEndian = !!e,
                    this
                },
                o.LE = function(e) {
                    return this.littleEndian = "undefined" == typeof e || !!e,
                    this
                },
                o.BE = function(e) {
                    return this.littleEndian = "undefined" != typeof e && !e,
                    this
                },
                o.prepend = function(e, t, n) {
                    "number" != typeof t && "string" == typeof t || (n = t, t = void 0);
                    var i = "undefined" == typeof n;
                    if (i && (n = this.offset), !this.noAssert) {
                        if ("number" != typeof n || n % 1 !== 0) throw TypeError("Illegal offset: " + n + " (not an integer)");
                        if (n >>>= 0, n < 0 || n + 0 > this.buffer.byteLength) throw RangeError("Illegal offset: 0 <= " + n + " (+0) <= " + this.buffer.byteLength)
                    }
                    e instanceof a || (e = a.wrap(e, t));
                    var r = e.limit - e.offset;
                    if (r <= 0) return this;
                    var o = r - n;
                    if (o > 0) {
                        var s = new ArrayBuffer(this.buffer.byteLength + o),
                        l = new Uint8Array(s);
                        l.set(this.view.subarray(n, this.buffer.byteLength), r),
                        this.buffer = s,
                        this.view = l,
                        this.offset += o,
                        this.markedOffset >= 0 && (this.markedOffset += o),
                        this.limit += o,
                        n += o
                    } else {
                        new Uint8Array(this.buffer)
                    }
                    return this.view.set(e.view.subarray(e.offset, e.limit), n - r),
                    e.offset = e.limit,
                    i && (this.offset -= r),
                    this
                },
                o.prependTo = function(e, t) {
                    return e.prepend(this, t),
                    this
                },
                o.printDebug = function(e) {
                    "function" != typeof e && (e = console.log.bind(console)),
                    e(this.toString() + "\n-------------------------------------------------------------------\n" + this.toDebug(!0))
                },
                o.remaining = function() {
                    return this.limit - this.offset
                },
                o.reset = function() {
                    return this.markedOffset >= 0 ? (this.offset = this.markedOffset, this.markedOffset = -1) : this.offset = 0,
                    this
                },
                o.resize = function(e) {
                    if (!this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal capacity: " + e + " (not an integer)");
                        if (e |= 0, e < 0) throw RangeError("Illegal capacity: 0 <= " + e)
                    }
                    if (this.buffer.byteLength < e) {
                        var t = new ArrayBuffer(e),
                        n = new Uint8Array(t);
                        n.set(this.view),
                        this.buffer = t,
                        this.view = n
                    }
                    return this
                },
                o.reverse = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    return e === t ? this: (Array.prototype.reverse.call(this.view.subarray(e, t)), this)
                },
                o.skip = function(e) {
                    if (!this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal length: " + e + " (not an integer)");
                        e |= 0
                    }
                    var t = this.offset + e;
                    if (!this.noAssert && (t < 0 || t > this.buffer.byteLength)) throw RangeError("Illegal length: 0 <= " + this.offset + " + " + e + " <= " + this.buffer.byteLength);
                    return this.offset = t,
                    this
                },
                o.slice = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    var n = this.clone();
                    return n.offset = e,
                    n.limit = t,
                    n
                },
                o.toBuffer = function(e) {
                    var t = this.offset,
                    n = this.limit;
                    if (!this.noAssert) {
                        if ("number" != typeof t || t % 1 !== 0) throw TypeError("Illegal offset: Not an integer");
                        if (t >>>= 0, "number" != typeof n || n % 1 !== 0) throw TypeError("Illegal limit: Not an integer");
                        if (n >>>= 0, t < 0 || t > n || n > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + t + " <= " + n + " <= " + this.buffer.byteLength)
                    }
                    if (!e && 0 === t && n === this.buffer.byteLength) return this.buffer;
                    if (t === n) return s;
                    var i = new ArrayBuffer(n - t);
                    return new Uint8Array(i).set(new Uint8Array(this.buffer).subarray(t, n), 0),
                    i
                },
                o.toArrayBuffer = o.toBuffer,
                o.toString = function(e, t, n) {
                    if ("undefined" == typeof e) return "ByteBufferAB(offset=" + this.offset + ",markedOffset=" + this.markedOffset + ",limit=" + this.limit + ",capacity=" + this.capacity() + ")";
                    switch ("number" == typeof e && (e = "utf8", t = e, n = t), e) {
                    case "utf8":
                        return this.toUTF8(t, n);
                    case "base64":
                        return this.toBase64(t, n);
                    case "hex":
                        return this.toHex(t, n);
                    case "binary":
                        return this.toBinary(t, n);
                    case "debug":
                        return this.toDebug();
                    case "columns":
                        return this.toColumns();
                    default:
                        throw Error("Unsupported encoding: " + e)
                    }
                };
                var u = function() {
                    for (var e = {},
                    t = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47], n = [], i = 0, r = t.length; i < r; ++i) n[t[i]] = i;
                    return e.encode = function(e, n) {
                        for (var i, r; null !== (i = e());) n(t[i >> 2 & 63]),
                        r = (3 & i) << 4,
                        null !== (i = e()) ? (r |= i >> 4 & 15, n(t[63 & (r | i >> 4 & 15)]), r = (15 & i) << 2, null !== (i = e()) ? (n(t[63 & (r | i >> 6 & 3)]), n(t[63 & i])) : (n(t[63 & r]), n(61))) : (n(t[63 & r]), n(61), n(61))
                    },
                    e.decode = function(e, t) {
                        function i(e) {
                            throw Error("Illegal character code: " + e)
                        }
                        for (var r, a, o; null !== (r = e());) if (a = n[r], "undefined" == typeof a && i(r), null !== (r = e()) && (o = n[r], "undefined" == typeof o && i(r), t(a << 2 >>> 0 | (48 & o) >> 4), null !== (r = e()))) {
                            if (a = n[r], "undefined" == typeof a) {
                                if (61 === r) break;
                                i(r)
                            }
                            if (t((15 & o) << 4 >>> 0 | (60 & a) >> 2), null !== (r = e())) {
                                if (o = n[r], "undefined" == typeof o) {
                                    if (61 === r) break;
                                    i(r)
                                }
                                t((3 & a) << 6 >>> 0 | o)
                            }
                        }
                    },
                    e.test = function(e) {
                        return /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(e)
                    },
                    e
                } ();
                o.toBase64 = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), e |= 0, t |= 0, e < 0 || t > this.capacity || e > t) throw RangeError("begin, end");
                    var i;
                    return u.encode(function() {
                        return e < t ? this.view[e++] : null
                    }.bind(this), i = n()),
                    i()
                },
                a.fromBase64 = function(e, n) {
                    if ("string" != typeof e) throw TypeError("str");
                    var i = new a(e.length / 4 * 3, n),
                    r = 0;
                    return u.decode(t(e),
                    function(e) {
                        i.view[r++] = e
                    }),
                    i.limit = r,
                    i
                },
                a.btoa = function(e) {
                    return a.fromBinary(e).toBase64()
                },
                a.atob = function(e) {
                    return a.fromBase64(e).toBinary()
                },
                o.toBinary = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), e |= 0, t |= 0, e < 0 || t > this.capacity() || e > t) throw RangeError("begin, end");
                    if (e === t) return "";
                    for (var n = [], i = []; e < t;) n.push(this.view[e++]),
                    n.length >= 1024 && (i.push(String.fromCharCode.apply(String, n)), n = []);
                    return i.join("") + String.fromCharCode.apply(String, n)
                },
                a.fromBinary = function(e, t) {
                    if ("string" != typeof e) throw TypeError("str");
                    for (var n, i = 0,
                    r = e.length,
                    o = new a(r, t); i < r;) {
                        if (n = e.charCodeAt(i), n > 255) throw RangeError("illegal char code: " + n);
                        o.view[i++] = n
                    }
                    return o.limit = r,
                    o
                },
                o.toDebug = function(e) {
                    for (var t, n = -1,
                    i = this.buffer.byteLength,
                    r = "",
                    a = "",
                    o = ""; n < i;) {
                        if (n !== -1 && (t = this.view[n], r += t < 16 ? "0" + t.toString(16).toUpperCase() : t.toString(16).toUpperCase(), e && (a += t > 32 && t < 127 ? String.fromCharCode(t) : ".")), ++n, e && n > 0 && n % 16 === 0 && n !== i) {
                            for (; r.length < 51;) r += " ";
                            o += r + a + "\n",
                            r = a = ""
                        }
                        r += n === this.offset && n === this.limit ? n === this.markedOffset ? "!": "|": n === this.offset ? n === this.markedOffset ? "[": "<": n === this.limit ? n === this.markedOffset ? "]": ">": n === this.markedOffset ? "'": e || 0 !== n && n !== i ? " ": ""
                    }
                    if (e && " " !== r) {
                        for (; r.length < 51;) r += " ";
                        o += r + a + "\n"
                    }
                    return e ? o: r
                },
                a.fromDebug = function(e, t, n) {
                    for (var i, r, o = e.length,
                    s = new a((o + 1) / 3 | 0, t, n), l = 0, u = 0, f = !1, d = !1, h = !1, p = !1, c = !1; l < o;) {
                        switch (i = e.charAt(l++)) {
                        case "!":
                            if (!n) {
                                if (d || h || p) {
                                    c = !0;
                                    break
                                }
                                d = h = p = !0
                            }
                            s.offset = s.markedOffset = s.limit = u,
                            f = !1;
                            break;
                        case "|":
                            if (!n) {
                                if (d || p) {
                                    c = !0;
                                    break
                                }
                                d = p = !0
                            }
                            s.offset = s.limit = u,
                            f = !1;
                            break;
                        case "[":
                            if (!n) {
                                if (d || h) {
                                    c = !0;
                                    break
                                }
                                d = h = !0
                            }
                            s.offset = s.markedOffset = u,
                            f = !1;
                            break;
                        case "<":
                            if (!n) {
                                if (d) {
                                    c = !0;
                                    break
                                }
                                d = !0
                            }
                            s.offset = u,
                            f = !1;
                            break;
                        case "]":
                            if (!n) {
                                if (p || h) {
                                    c = !0;
                                    break
                                }
                                p = h = !0
                            }
                            s.limit = s.markedOffset = u,
                            f = !1;
                            break;
                        case ">":
                            if (!n) {
                                if (p) {
                                    c = !0;
                                    break
                                }
                                p = !0
                            }
                            s.limit = u,
                            f = !1;
                            break;
                        case "'":
                            if (!n) {
                                if (h) {
                                    c = !0;
                                    break
                                }
                                h = !0
                            }
                            s.markedOffset = u,
                            f = !1;
                            break;
                        case " ":
                            f = !1;
                            break;
                        default:
                            if (!n && f) {
                                c = !0;
                                break
                            }
                            if (r = parseInt(i + e.charAt(l++), 16), !n && (isNaN(r) || r < 0 || r > 255)) throw TypeError("Illegal str: Not a debug encoded string");
                            s.view[u++] = r,
                            f = !0
                        }
                        if (c) throw TypeError("Illegal str: Invalid symbol at " + l)
                    }
                    if (!n) {
                        if (!d || !p) throw TypeError("Illegal str: Missing offset or limit");
                        if (u < s.buffer.byteLength) throw TypeError("Illegal str: Not a debug encoded string (is it hex?) " + u + " < " + o)
                    }
                    return s
                },
                o.toHex = function(e, t) {
                    if (e = "undefined" == typeof e ? this.offset: e, t = "undefined" == typeof t ? this.limit: t, !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    for (var n, i = new Array(t - e); e < t;) n = this.view[e++],
                    n < 16 ? i.push("0", n.toString(16)) : i.push(n.toString(16));
                    return i.join("")
                },
                a.fromHex = function(e, t, n) {
                    if (!n) {
                        if ("string" != typeof e) throw TypeError("Illegal str: Not a string");
                        if (e.length % 2 !== 0) throw TypeError("Illegal str: Length not a multiple of 2")
                    }
                    for (var i, r = e.length,
                    o = new a(r / 2 | 0, t), s = 0, l = 0; s < r; s += 2) {
                        if (i = parseInt(e.substring(s, s + 2), 16), !n && (!isFinite(i) || i < 0 || i > 255)) throw TypeError("Illegal str: Contains non-hex characters");
                        o.view[l++] = i
                    }
                    return o.limit = l,
                    o
                };
                var f = function() {
                    var e = {};
                    return e.MAX_CODEPOINT = 1114111,
                    e.encodeUTF8 = function(e, t) {
                        var n = null;
                        for ("number" == typeof e && (n = e, e = function() {
                            return null
                        }); null !== n || null !== (n = e());) n < 128 ? t(127 & n) : n < 2048 ? (t(n >> 6 & 31 | 192), t(63 & n | 128)) : n < 65536 ? (t(n >> 12 & 15 | 224), t(n >> 6 & 63 | 128), t(63 & n | 128)) : (t(n >> 18 & 7 | 240), t(n >> 12 & 63 | 128), t(n >> 6 & 63 | 128), t(63 & n | 128)),
                        n = null
                    },
                    e.decodeUTF8 = function(e, t) {
                        for (var n, i, r, a, o = function(e) {
                            e = e.slice(0, e.indexOf(null));
                            var t = Error(e.toString());
                            throw t.name = "TruncatedError",
                            t.bytes = e,
                            t
                        }; null !== (n = e());) if (0 === (128 & n)) t(n);
                        else if (192 === (224 & n)) null === (i = e()) && o([n, i]),
                        t((31 & n) << 6 | 63 & i);
                        else if (224 === (240 & n))(null === (i = e()) || null === (r = e())) && o([n, i, r]),
                        t((15 & n) << 12 | (63 & i) << 6 | 63 & r);
                        else {
                            if (240 !== (248 & n)) throw RangeError("Illegal starting byte: " + n); (null === (i = e()) || null === (r = e()) || null === (a = e())) && o([n, i, r, a]),
                            t((7 & n) << 18 | (63 & i) << 12 | (63 & r) << 6 | 63 & a)
                        }
                    },
                    e.UTF16toUTF8 = function(e, t) {
                        for (var n, i = null;;) {
                            if (null === (n = null !== i ? i: e())) break;
                            n >= 55296 && n <= 57343 && null !== (i = e()) && i >= 56320 && i <= 57343 ? (t(1024 * (n - 55296) + i - 56320 + 65536), i = null) : t(n)
                        }
                        null !== i && t(i)
                    },
                    e.UTF8toUTF16 = function(e, t) {
                        var n = null;
                        for ("number" == typeof e && (n = e, e = function() {
                            return null
                        }); null !== n || null !== (n = e());) n <= 65535 ? t(n) : (n -= 65536, t((n >> 10) + 55296), t(n % 1024 + 56320)),
                        n = null
                    },
                    e.encodeUTF16toUTF8 = function(t, n) {
                        e.UTF16toUTF8(t,
                        function(t) {
                            e.encodeUTF8(t, n)
                        })
                    },
                    e.decodeUTF8toUTF16 = function(t, n) {
                        e.decodeUTF8(t,
                        function(t) {
                            e.UTF8toUTF16(t, n)
                        })
                    },
                    e.calculateCodePoint = function(e) {
                        return e < 128 ? 1 : e < 2048 ? 2 : e < 65536 ? 3 : 4
                    },
                    e.calculateUTF8 = function(e) {
                        for (var t, n = 0; null !== (t = e());) n += t < 128 ? 1 : t < 2048 ? 2 : t < 65536 ? 3 : 4;
                        return n
                    },
                    e.calculateUTF16asUTF8 = function(t) {
                        var n = 0,
                        i = 0;
                        return e.UTF16toUTF8(t,
                        function(e) {++n,
                            i += e < 128 ? 1 : e < 2048 ? 2 : e < 65536 ? 3 : 4
                        }),
                        [n, i]
                    },
                    e
                } ();
                return o.toUTF8 = function(e, t) {
                    if ("undefined" == typeof e && (e = this.offset), "undefined" == typeof t && (t = this.limit), !this.noAssert) {
                        if ("number" != typeof e || e % 1 !== 0) throw TypeError("Illegal begin: Not an integer");
                        if (e >>>= 0, "number" != typeof t || t % 1 !== 0) throw TypeError("Illegal end: Not an integer");
                        if (t >>>= 0, e < 0 || e > t || t > this.buffer.byteLength) throw RangeError("Illegal range: 0 <= " + e + " <= " + t + " <= " + this.buffer.byteLength)
                    }
                    var i;
                    try {
                        f.decodeUTF8toUTF16(function() {
                            return e < t ? this.view[e++] : null
                        }.bind(this), i = n())
                    } catch(n) {
                        if (e !== t) throw RangeError("Illegal range: Truncated data, " + e + " != " + t)
                    }
                    return i()
                },
                a.fromUTF8 = function(e, n, i) {
                    if (!i && "string" != typeof e) throw TypeError("Illegal str: Not a string");
                    var r = new a(f.calculateUTF16asUTF8(t(e), !0)[1], n, i),
                    o = 0;
                    return f.encodeUTF16toUTF8(t(e),
                    function(e) {
                        r.view[o++] = e
                    }),
                    r.limit = o,
                    r
                },
                a
            })
        }).call(t, n(26)(e))
    },
    function(e, t, n) {
        var i = n(32),
        r = n(2)("toStringTag"),
        a = "Arguments" == i(function() {
            return arguments
        } ()),
        o = function(e, t) {
            try {
                return e[t]
            } catch(e) {}
        };
        e.exports = function(e) {
            var t, n, s;
            return void 0 === e ? "Undefined": null === e ? "Null": "string" == typeof(n = o(t = Object(e), r)) ? n: a ? i(t) : "Object" == (s = i(t)) && "function" == typeof t.callee ? "Arguments": s
        }
    },
    function(e, t) {
        var n = {}.toString;
        e.exports = function(e) {
            return n.call(e).slice(8, -1)
        }
    },
    function(e, t, n) {
        var i = n(19),
        r = n(4).document,
        a = i(r) && i(r.createElement);
        e.exports = function(e) {
            return a ? r.createElement(e) : {}
        }
    },
    function(e, t) {
        e.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")
    },
    function(e, t, n) {
        var i = n(32);
        e.exports = Object("z").propertyIsEnumerable(0) ? Object: function(e) {
            return "String" == i(e) ? e.split("") : Object(e)
        }
    },
    function(e, t, n) {
        "use strict";
        var i = n(83),
        r = n(5),
        a = n(91),
        o = n(6),
        s = n(12),
        l = n(7),
        u = n(81),
        f = n(39),
        d = n(87),
        h = n(2)("iterator"),
        p = !([].keys && "next" in [].keys()),
        c = "@@iterator",
        m = "keys",
        y = "values",
        g = function() {
            return this
        };
        e.exports = function(e, t, n, v, _, w, b) {
            u(n, t, v);
            var E, T, S, I = function(e) {
                if (!p && e in x) return x[e];
                switch (e) {
                case m:
                    return function() {
                        return new n(this, e)
                    };
                case y:
                    return function() {
                        return new n(this, e)
                    }
                }
                return function() {
                    return new n(this, e)
                }
            },
            k = t + " Iterator",
            A = _ == y,
            P = !1,
            x = e.prototype,
            L = x[h] || x[c] || _ && x[_],
            R = L || I(_),
            C = _ ? A ? I("entries") : R: void 0,
            U = "Array" == t ? x.entries || L: L;
            if (U && (S = d(U.call(new e)), S !== Object.prototype && (f(S, k, !0), i || s(S, h) || o(S, h, g))), A && L && L.name !== y && (P = !0, R = function() {
                return L.call(this)
            }), i && !b || !p && !P && x[h] || o(x, h, R), l[t] = R, l[k] = g, _) if (E = {
                values: A ? R: I(y),
                keys: w ? R: I(m),
                entries: C
            },
            b) for (T in E) T in x || a(x, T, E[T]);
            else r(r.P + r.F * (p || P), t, E);
            return E
        }
    },
    function(e, t, n) {
        var i = n(13),
        r = n(10),
        a = n(20);
        e.exports = n(3) ? Object.defineProperties: function(e, t) {
            r(e);
            for (var n, o = a(t), s = o.length, l = 0; s > l;) i.f(e, n = o[l++], t[n]);
            return e
        }
    },
    function(e, t) {
        e.exports = function(e, t) {
            return {
                enumerable: !(1 & e),
                configurable: !(2 & e),
                writable: !(4 & e),
                value: t
            }
        }
    },
    function(e, t, n) {
        var i = n(13).f,
        r = n(12),
        a = n(2)("toStringTag");
        e.exports = function(e, t, n) {
            e && !r(e = n ? e: e.prototype, a) && i(e, a, {
                configurable: !0,
                value: t
            })
        }
    },
    function(e, t, n) {
        var i = n(4),
        r = "__core-js_shared__",
        a = i[r] || (i[r] = {});
        e.exports = function(e) {
            return a[e] || (a[e] = {})
        }
    },
    function(e, t) {
        var n = 0,
        i = Math.random();
        e.exports = function(e) {
            return "Symbol(".concat(void 0 === e ? "": e, ")_", (++n + i).toString(36))
        }
    },
    function(e, t, n) {
        "use strict";
        var i = n(92)(!0);
        n(36)(String, "String",
        function(e) {
            this._t = String(e),
            this._i = 0
        },
        function() {
            var e, t = this._t,
            n = this._i;
            return n >= t.length ? {
                value: void 0,
                done: !0
            }: (e = i(t, n), this._i += e.length, {
                value: e,
                done: !1
            })
        })
    },
    function(e, t, n) {
        n(99);
        for (var i = n(4), r = n(6), a = n(7), o = n(2)("toStringTag"), s = ["NodeList", "DOMTokenList", "MediaList", "StyleSheetList", "CSSRuleList"], l = 0; l < 5; l++) {
            var u = s[l],
            f = i[u],
            d = f && f.prototype;
            d && !d[o] && r(d, o, u),
            a[u] = a.Array
        }
    },
    function(e, t, n) {
        var i, r, a; (function(e) {
            /**
	 * @license long.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
	 * Released under the Apache License, Version 2.0
	 * see: https://github.com/dcodeIO/long.js for details
	 */
            !
            function(o, s) {
                n(25).amd ? (r = [], i = s, a = "function" == typeof i ? i.apply(t, r) : i, !(void 0 !== a && (e.exports = a))) : "object" == typeof e && e && e.exports ? e.exports = s() : (o.dcodeIO = o.dcodeIO || {}).Long = s()
            } (this,
            function() {
                "use strict";
                function e(e, t, n) {
                    this.low = 0 | e,
                    this.high = 0 | t,
                    this.unsigned = !!n
                }
                function t(e) {
                    return (e && e.__isLong__) === !0
                }
                function n(e, t) {
                    var n, i, a;
                    return t ? (e >>>= 0, (a = 0 <= e && e < 256) && (i = l[e]) ? i: (n = r(e, (0 | e) < 0 ? -1 : 0, !0), a && (l[e] = n), n)) : (e |= 0, (a = -128 <= e && e < 128) && (i = s[e]) ? i: (n = r(e, e < 0 ? -1 : 0, !1), a && (s[e] = n), n))
                }
                function i(e, t) {
                    if (isNaN(e) || !isFinite(e)) return t ? y: m;
                    if (t) {
                        if (e < 0) return y;
                        if (e >= h) return b
                    } else {
                        if (e <= -p) return E;
                        if (e + 1 >= p) return w
                    }
                    return e < 0 ? i( - e, t).neg() : r(e % d | 0, e / d | 0, t)
                }
                function r(t, n, i) {
                    return new e(t, n, i)
                }
                function a(e, t, n) {
                    if (0 === e.length) throw Error("empty string");
                    if ("NaN" === e || "Infinity" === e || "+Infinity" === e || "-Infinity" === e) return m;
                    if ("number" == typeof t ? (n = t, t = !1) : t = !!t, n = n || 10, n < 2 || 36 < n) throw RangeError("radix");
                    var r;
                    if ((r = e.indexOf("-")) > 0) throw Error("interior hyphen");
                    if (0 === r) return a(e.substring(1), t, n).neg();
                    for (var o = i(u(n, 8)), s = m, l = 0; l < e.length; l += 8) {
                        var f = Math.min(8, e.length - l),
                        d = parseInt(e.substring(l, l + f), n);
                        if (f < 8) {
                            var h = i(u(n, f));
                            s = s.mul(h).add(i(d))
                        } else s = s.mul(o),
                        s = s.add(i(d))
                    }
                    return s.unsigned = t,
                    s
                }
                function o(t) {
                    return t instanceof e ? t: "number" == typeof t ? i(t) : "string" == typeof t ? a(t) : r(t.low, t.high, t.unsigned)
                }
                e.prototype.__isLong__,
                Object.defineProperty(e.prototype, "__isLong__", {
                    value: !0,
                    enumerable: !1,
                    configurable: !1
                }),
                e.isLong = t;
                var s = {},
                l = {};
                e.fromInt = n,
                e.fromNumber = i,
                e.fromBits = r;
                var u = Math.pow;
                e.fromString = a,
                e.fromValue = o;
                var f = 1 << 24,
                d = 4294967296,
                h = 0x10000000000000000,
                p = h / 2,
                c = n(f),
                m = n(0);
                e.ZERO = m;
                var y = n(0, !0);
                e.UZERO = y;
                var g = n(1);
                e.ONE = g;
                var v = n(1, !0);
                e.UONE = v;
                var _ = n( - 1);
                e.NEG_ONE = _;
                var w = r( - 1, 2147483647, !1);
                e.MAX_VALUE = w;
                var b = r( - 1, -1, !0);
                e.MAX_UNSIGNED_VALUE = b;
                var E = r(0, -2147483648, !1);
                e.MIN_VALUE = E;
                var T = e.prototype;
                return T.toInt = function() {
                    return this.unsigned ? this.low >>> 0 : this.low
                },
                T.toNumber = function() {
                    return this.unsigned ? (this.high >>> 0) * d + (this.low >>> 0) : this.high * d + (this.low >>> 0)
                },
                T.toString = function(e) {
                    if (e = e || 10, e < 2 || 36 < e) throw RangeError("radix");
                    if (this.isZero()) return "0";
                    if (this.isNegative()) {
                        if (this.eq(E)) {
                            var t = i(e),
                            n = this.div(t),
                            r = n.mul(t).sub(this);
                            return n.toString(e) + r.toInt().toString(e)
                        }
                        return "-" + this.neg().toString(e)
                    }
                    for (var a = i(u(e, 6), this.unsigned), o = this, s = "";;) {
                        var l = o.div(a),
                        f = o.sub(l.mul(a)).toInt() >>> 0,
                        d = f.toString(e);
                        if (o = l, o.isZero()) return d + s;
                        for (; d.length < 6;) d = "0" + d;
                        s = "" + d + s
                    }
                },
                T.getHighBits = function() {
                    return this.high
                },
                T.getHighBitsUnsigned = function() {
                    return this.high >>> 0
                },
                T.getLowBits = function() {
                    return this.low
                },
                T.getLowBitsUnsigned = function() {
                    return this.low >>> 0
                },
                T.getNumBitsAbs = function() {
                    if (this.isNegative()) return this.eq(E) ? 64 : this.neg().getNumBitsAbs();
                    for (var e = 0 != this.high ? this.high: this.low, t = 31; t > 0 && 0 == (e & 1 << t); t--);
                    return 0 != this.high ? t + 33 : t + 1
                },
                T.isZero = function() {
                    return 0 === this.high && 0 === this.low
                },
                T.isNegative = function() {
                    return ! this.unsigned && this.high < 0
                },
                T.isPositive = function() {
                    return this.unsigned || this.high >= 0
                },
                T.isOdd = function() {
                    return 1 === (1 & this.low)
                },
                T.isEven = function() {
                    return 0 === (1 & this.low)
                },
                T.equals = function(e) {
                    return t(e) || (e = o(e)),
                    (this.unsigned === e.unsigned || this.high >>> 31 !== 1 || e.high >>> 31 !== 1) && (this.high === e.high && this.low === e.low)
                },
                T.eq = T.equals,
                T.notEquals = function(e) {
                    return ! this.eq(e)
                },
                T.neq = T.notEquals,
                T.lessThan = function(e) {
                    return this.comp(e) < 0
                },
                T.lt = T.lessThan,
                T.lessThanOrEqual = function(e) {
                    return this.comp(e) <= 0
                },
                T.lte = T.lessThanOrEqual,
                T.greaterThan = function(e) {
                    return this.comp(e) > 0
                },
                T.gt = T.greaterThan,
                T.greaterThanOrEqual = function(e) {
                    return this.comp(e) >= 0
                },
                T.gte = T.greaterThanOrEqual,
                T.compare = function(e) {
                    if (t(e) || (e = o(e)), this.eq(e)) return 0;
                    var n = this.isNegative(),
                    i = e.isNegative();
                    return n && !i ? -1 : !n && i ? 1 : this.unsigned ? e.high >>> 0 > this.high >>> 0 || e.high === this.high && e.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(e).isNegative() ? -1 : 1
                },
                T.comp = T.compare,
                T.negate = function() {
                    return ! this.unsigned && this.eq(E) ? E: this.not().add(g)
                },
                T.neg = T.negate,
                T.add = function(e) {
                    t(e) || (e = o(e));
                    var n = this.high >>> 16,
                    i = 65535 & this.high,
                    a = this.low >>> 16,
                    s = 65535 & this.low,
                    l = e.high >>> 16,
                    u = 65535 & e.high,
                    f = e.low >>> 16,
                    d = 65535 & e.low,
                    h = 0,
                    p = 0,
                    c = 0,
                    m = 0;
                    return m += s + d,
                    c += m >>> 16,
                    m &= 65535,
                    c += a + f,
                    p += c >>> 16,
                    c &= 65535,
                    p += i + u,
                    h += p >>> 16,
                    p &= 65535,
                    h += n + l,
                    h &= 65535,
                    r(c << 16 | m, h << 16 | p, this.unsigned)
                },
                T.subtract = function(e) {
                    return t(e) || (e = o(e)),
                    this.add(e.neg())
                },
                T.sub = T.subtract,
                T.multiply = function(e) {
                    if (this.isZero()) return m;
                    if (t(e) || (e = o(e)), e.isZero()) return m;
                    if (this.eq(E)) return e.isOdd() ? E: m;
                    if (e.eq(E)) return this.isOdd() ? E: m;
                    if (this.isNegative()) return e.isNegative() ? this.neg().mul(e.neg()) : this.neg().mul(e).neg();
                    if (e.isNegative()) return this.mul(e.neg()).neg();
                    if (this.lt(c) && e.lt(c)) return i(this.toNumber() * e.toNumber(), this.unsigned);
                    var n = this.high >>> 16,
                    a = 65535 & this.high,
                    s = this.low >>> 16,
                    l = 65535 & this.low,
                    u = e.high >>> 16,
                    f = 65535 & e.high,
                    d = e.low >>> 16,
                    h = 65535 & e.low,
                    p = 0,
                    y = 0,
                    g = 0,
                    v = 0;
                    return v += l * h,
                    g += v >>> 16,
                    v &= 65535,
                    g += s * h,
                    y += g >>> 16,
                    g &= 65535,
                    g += l * d,
                    y += g >>> 16,
                    g &= 65535,
                    y += a * h,
                    p += y >>> 16,
                    y &= 65535,
                    y += s * d,
                    p += y >>> 16,
                    y &= 65535,
                    y += l * f,
                    p += y >>> 16,
                    y &= 65535,
                    p += n * h + a * d + s * f + l * u,
                    p &= 65535,
                    r(g << 16 | v, p << 16 | y, this.unsigned)
                },
                T.mul = T.multiply,
                T.divide = function(e) {
                    if (t(e) || (e = o(e)), e.isZero()) throw Error("division by zero");
                    if (this.isZero()) return this.unsigned ? y: m;
                    var n, r, a;
                    if (this.unsigned) {
                        if (e.unsigned || (e = e.toUnsigned()), e.gt(this)) return y;
                        if (e.gt(this.shru(1))) return v;
                        a = y
                    } else {
                        if (this.eq(E)) {
                            if (e.eq(g) || e.eq(_)) return E;
                            if (e.eq(E)) return g;
                            var s = this.shr(1);
                            return n = s.div(e).shl(1),
                            n.eq(m) ? e.isNegative() ? g: _: (r = this.sub(e.mul(n)), a = n.add(r.div(e)))
                        }
                        if (e.eq(E)) return this.unsigned ? y: m;
                        if (this.isNegative()) return e.isNegative() ? this.neg().div(e.neg()) : this.neg().div(e).neg();
                        if (e.isNegative()) return this.div(e.neg()).neg();
                        a = m
                    }
                    for (r = this; r.gte(e);) {
                        n = Math.max(1, Math.floor(r.toNumber() / e.toNumber()));
                        for (var l = Math.ceil(Math.log(n) / Math.LN2), f = l <= 48 ? 1 : u(2, l - 48), d = i(n), h = d.mul(e); h.isNegative() || h.gt(r);) n -= f,
                        d = i(n, this.unsigned),
                        h = d.mul(e);
                        d.isZero() && (d = g),
                        a = a.add(d),
                        r = r.sub(h)
                    }
                    return a
                },
                T.div = T.divide,
                T.modulo = function(e) {
                    return t(e) || (e = o(e)),
                    this.sub(this.div(e).mul(e))
                },
                T.mod = T.modulo,
                T.not = function() {
                    return r(~this.low, ~this.high, this.unsigned)
                },
                T.and = function(e) {
                    return t(e) || (e = o(e)),
                    r(this.low & e.low, this.high & e.high, this.unsigned)
                },
                T.or = function(e) {
                    return t(e) || (e = o(e)),
                    r(this.low | e.low, this.high | e.high, this.unsigned)
                },
                T.xor = function(e) {
                    return t(e) || (e = o(e)),
                    r(this.low ^ e.low, this.high ^ e.high, this.unsigned)
                },
                T.shiftLeft = function(e) {
                    return t(e) && (e = e.toInt()),
                    0 === (e &= 63) ? this: e < 32 ? r(this.low << e, this.high << e | this.low >>> 32 - e, this.unsigned) : r(0, this.low << e - 32, this.unsigned)
                },
                T.shl = T.shiftLeft,
                T.shiftRight = function(e) {
                    return t(e) && (e = e.toInt()),
                    0 === (e &= 63) ? this: e < 32 ? r(this.low >>> e | this.high << 32 - e, this.high >> e, this.unsigned) : r(this.high >> e - 32, this.high >= 0 ? 0 : -1, this.unsigned)
                },
                T.shr = T.shiftRight,
                T.shiftRightUnsigned = function(e) {
                    if (t(e) && (e = e.toInt()), e &= 63, 0 === e) return this;
                    var n = this.high;
                    if (e < 32) {
                        var i = this.low;
                        return r(i >>> e | n << 32 - e, n >>> e, this.unsigned)
                    }
                    return 32 === e ? r(n, 0, this.unsigned) : r(n >>> e - 32, 0, this.unsigned)
                },
                T.shru = T.shiftRightUnsigned,
                T.toSigned = function() {
                    return this.unsigned ? r(this.low, this.high, !1) : this
                },
                T.toUnsigned = function() {
                    return this.unsigned ? this: r(this.low, this.high, !0)
                },
                T.toBytes = function(e) {
                    return e ? this.toBytesLE() : this.toBytesBE()
                },
                T.toBytesLE = function() {
                    var e = this.high,
                    t = this.low;
                    return [255 & t, t >>> 8 & 255, t >>> 16 & 255, t >>> 24 & 255, 255 & e, e >>> 8 & 255, e >>> 16 & 255, e >>> 24 & 255]
                },
                T.toBytesBE = function() {
                    var e = this.high,
                    t = this.low;
                    return [e >>> 24 & 255, e >>> 16 & 255, e >>> 8 & 255, 255 & e, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t]
                },
                e
            })
        }).call(t, n(26)(e))
    },
    function(e, t) {
        "use strict";
        e.exports = {
            2 : "need dictionary",
            1 : "stream end",
            0 : "",
            "-1": "file error",
            "-2": "stream error",
            "-3": "data error",
            "-4": "insufficient memory",
            "-5": "buffer error",
            "-6": "incompatible version"
        }
    },
    function(e, t) {
        function n() {
            throw new Error("setTimeout has not been defined")
        }
        function i() {
            throw new Error("clearTimeout has not been defined")
        }
        function r(e) {
            if (f === setTimeout) return setTimeout(e, 0);
            if ((f === n || !f) && setTimeout) return f = setTimeout,
            setTimeout(e, 0);
            try {
                return f(e, 0)
            } catch(t) {
                try {
                    return f.call(null, e, 0)
                } catch(t) {
                    return f.call(this, e, 0)
                }
            }
        }
        function a(e) {
            if (d === clearTimeout) return clearTimeout(e);
            if ((d === i || !d) && clearTimeout) return d = clearTimeout,
            clearTimeout(e);
            try {
                return d(e)
            } catch(t) {
                try {
                    return d.call(null, e)
                } catch(t) {
                    return d.call(this, e)
                }
            }
        }
        function o() {
            m && p && (m = !1, p.length ? c = p.concat(c) : y = -1, c.length && s())
        }
        function s() {
            if (!m) {
                var e = r(o);
                m = !0;
                for (var t = c.length; t;) {
                    for (p = c, c = []; ++y < t;) p && p[y].run();
                    y = -1,
                    t = c.length
                }
                p = null,
                m = !1,
                a(e)
            }
        }
        function l(e, t) {
            this.fun = e,
            this.array = t
        }
        function u() {}
        var f, d, h = e.exports = {}; !
        function() {
            try {
                f = "function" == typeof setTimeout ? setTimeout: n
            } catch(e) {
                f = n
            }
            try {
                d = "function" == typeof clearTimeout ? clearTimeout: i
            } catch(e) {
                d = i
            }
        } ();
        var p, c = [],
        m = !1,
        y = -1;
        h.nextTick = function(e) {
            var t = new Array(arguments.length - 1);
            if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
            c.push(new l(e, t)),
            1 !== c.length || m || r(s)
        },
        l.prototype.run = function() {
            this.fun.apply(null, this.array)
        },
        h.title = "browser",
        h.browser = !0,
        h.env = {},
        h.argv = [],
        h.version = "",
        h.versions = {},
        h.on = u,
        h.addListener = u,
        h.once = u,
        h.off = u,
        h.removeListener = u,
        h.removeAllListeners = u,
        h.emit = u,
        h.binding = function(e) {
            throw new Error("process.binding is not supported")
        },
        h.cwd = function() {
            return "/"
        },
        h.chdir = function(e) {
            throw new Error("process.chdir is not supported")
        },
        h.umask = function() {
            return 0
        }
    },
    function(e, t) {},
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var r = n(8),
        a = i(r),
        o = n(9),
        s = i(o),
        l = n(15),
        u = i(l),
        f = 1e7,
        d = function() {
            return Math.ceil(1e4 * Math.random())
        },
        h = "page",
        p = "lastEvent",
        c = "referrerEvent",
        m = "incrementId",
        y = function() {
            function e(t) { (0, a.
            default)(this, e),
                this.shared = new u.
            default("zap:SharedSession", window.localStorage, !0),
                this.storage = t || new u.
            default("zap:Session", window.sessionStorage),
                this.resetReferrer_()
            }
            return (0, s.
        default)(e, [{
                key: "resetReferrer_",
                value: function() {
                    var e = this.shared.get(p);
                    if (e) {
                        this.storage.set(c, e);
                        var t = this.storage.get(p);
                        t || this.storage.set(p, e)
                    }
                }
            },
            {
                key: "recordEvent",
                value: function(e) {
                    this.shared.set(p, e),
                    this.storage.set(p, e)
                }
            },
            {
                key: "recordPage",
                value: function(e) {
                    this.storage.set(h, e),
                    this.resetReferrer_()
                }
            },
            {
                key: "getLastEvent",
                value: function() {
                    return this.storage.get(p)
                }
            },
            {
                key: "getReferrerEvent",
                value: function() {
                    return this.storage.get(c)
                }
            },
            {
                key: "getCurrentIncrementId",
                value: function() {
                    var e = Number(this.shared.get(m));
                    return e || (e = d(), this.shared.set(m, e)),
                    e
                }
            },
            {
                key: "getNextIncrementId",
                value: function() {
                    var e = this.getCurrentIncrementId();
                    return e >= f && (e = d()),
                    e += 1,
                    this.shared.set(m, e),
                    e
                }
            }]),
            e
        } ();
        t.
    default = y
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var r = n(29),
        a = i(r),
        o = n(8),
        s = i(o),
        l = n(9),
        u = i(l),
        f = n(15),
        d = i(f),
        h = n(17),
        p = i(h),
        c = p.
    default.ZaLogEntry,
        m = 100,
        y = function() {
            function e(t) { (0, s.
            default)(this, e),
                this.storage = t || new d.
            default("zap:Stash", window.localStorage)
            }
            return (0, u.
        default)(e, [{
                key: "stash",
                value: function(e) {
                    e = Array.isArray(e) ? e: [e];
                    var t = this.get(); (0, a.
                default)(t).length > m || (e.forEach(function(e) {
                        var n = e.getLocalIncrementId();
                        n && (t[n] = e.toBase64())
                    }), this.storage.set("logEntries", t))
                }
            },
            {
                key: "unStash",
                value: function(e) {
                    e = Array.isArray(e) ? e: [e];
                    var t = this.get();
                    e.forEach(function(e) {
                        var n = e.getLocalIncrementId();
                        n && delete t[n]
                    }),
                    this.storage.set("logEntries", t)
                }
            },
            {
                key: "get",
                value: function() {
                    return this.storage.get("logEntries") || {}
                }
            },
            {
                key: "pop",
                value: function() {
                    var e = this.get();
                    return this.clear(),
                    (0, a.
                default)(e).reduce(function(t, n) {
                        return t.push(c.decode64(e[n])),
                        t
                    },
                    [])
                }
            },
            {
                key: "clear",
                value: function() {
                    this.storage.remove("logEntries")
                }
            }]),
            e
        } ();
        t.
    default = y
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        function r(e) { (0, c.
        default)(M, e),
            e.userId && (0, c.
        default)(B.id, {
                user_id: e.userId
            }),
            e.memberHashId && (0, c.
        default)(B.id, {
                member_hash_id: e.memberHashId
            }),
            e.userType && (0, c.
        default)(B.id, {
                user_type: e.userType
            }),
            e.responseId && (0, c.
        default)(B.id, {
                response_id: e.responseId
            }),
            e.product && (0, c.
        default)(B.client, {
                product: e.product
            }),
            e.experiment && (0, c.
        default)(B.experiment, {
                feature: (0, v.parse)(e.experiment)
            }),
            e.apiHost && (R.defaults.apiHost = e.apiHost),
            e.compress && (R.defaults.compress = e.compress)
        }
        function a() {
            var e = new Date;
            return {
                client_timestamp: String(e.getTime()),
                client_timezone: e.toTimeString().slice(12, 17)
            }
        }
        function o(e, t) {
            if (M.enableLog && window.console) {
                for (var n, i = arguments.length,
                r = Array(i > 2 ? i - 2 : 0), a = 2; a < i; a++) r[a - 2] = arguments[a]; (n = console).info.apply(n, ["%c[zap:%s]", "color: green; font-size: 1.1em", e, t, t.toRaw()].concat(r))
            }
        }
        function s(e) {
            return {
                view: e,
                last_event: V.getLastEvent(),
                referrer_event: V.getReferrerEvent(),
                browser_referrer: document.referrer
            }
        }
        function l(e, t, n) {
            return {
                log_version: A.version,
                log_type: e,
                local_increment_id: V.getNextIncrementId(),
                base: (0, c.
            default)(B, {
                    time: a()
                }),
                detail: t,
                extra: (0, c.
            default)((0, E.
            default)(), n)
            }
        }
        function u() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            t = arguments[1];
            e.url || (e.url = L.
        default.href);
            var n = new O(l("PageShow", s(e), t));
            F && F.length && (j(F), F = null),
            D(n),
            V.recordPage(e),
            o("trackPageShow", n, e)
        }
        function f() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            t = arguments[1];
            e.url || (e.url = L.
        default.href);
            var n = new O(l("CardShow", s(e), t));
            D(n),
            o("trackCardShow", n, e)
        }
        function d() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            t = arguments[1];
            e.url || (e.url = L.
        default.href);
            var n = new O(l("Event", s(e), t));
            D(n),
            V.recordEvent(e),
            o("trackEvent", n, e)
        }
        function h() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            if (t.monitor && !(t.monitor.statusCode < 100)) {
                e.url || (e.url = L.
            default.href),
                t.monitor = (0, g.parse)(t.monitor);
                var n = new O(l("Monitor", s(e), t));
                D(n),
                o("trackMonitor", n, e)
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.trackMonitor = t.trackEvent = t.trackCardShow = t.trackPageShow = t.location = t.config = t.SUPPORTED = t.proto = void 0;
        var p = n(28),
        c = i(p),
        m = n(116),
        y = i(m),
        g = n(58),
        v = n(52),
        _ = n(53),
        w = i(_),
        b = n(54),
        E = i(b),
        T = n(48),
        S = i(T),
        I = n(49),
        k = i(I),
        A = n(17),
        P = i(A),
        x = n(16),
        L = i(x),
        R = n(59),
        C = i(R),
        U = n(51),
        O = P.
    default.ZaLogEntry,
        B = (0, w.
    default)(),
        M = {
            userId: null,
            memberHashId: null,
            responseId: null,
            compress: !0,
            enableLog: Boolean(window.localStorage && "1" === window.localStorage.getItem("zap:logenabled")),
            onBeforeSend: function() {
                return ! 0
            },
            apiHost: "https://zhihu-web-analytics.zhihu.com/api/v1",
            product: "zhihu"
        },
        N = 500,
        z = U.canUseZa,
        V = new S.
    default,
        Y = new k.
    default,
        F = Y.pop(),
        j = function(e) {
            Array.isArray(e) && e.length && (0, C.
        default)("/logs/batch", e,
            function() {
                return Y.unStash(e)
            })
        },
        D = function() {
            var e = [],
            t = (0, y.
        default)(function() {
                e.length && (j(e), e = [])
            },
            N);
            return function(n) {
                var i = M.onBeforeSend(n);
                i !== !1 && (e.push(n), Y.stash(n), t())
            }
        } ();
        t.proto = P.
    default,
        t.SUPPORTED = z,
        t.config = r,
        t.location = L.
    default,
        t.trackPageShow = u,
        t.trackCardShow = f,
        t.trackEvent = d,
        t.trackMonitor = h
    },
    function(e, t) { (function(e) {
            "use strict";
            Object.defineProperty(t, "__esModule", {
                value: !0
            });
            t.canUseZa = navigator.cookieEnabled && "DataView" in e && "ArrayBuffer" in e && "XMLHttpRequest" in e && "withCredentials" in new XMLHttpRequest
        }).call(t,
        function() {
            return this
        } ())
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        function r(e) {
            return e && "string" == typeof e ? e.split(",").map(function(e) {
                var t = e.split(":"),
                n = (0, o.
            default)(t, 2),
                i = n[0],
                r = n[1];
                return {
                    name: i,
                    value: r
                }
            }) : e
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var a = n(66),
        o = i(a);
        t.parse = r
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        function r(e) {
            var t = e.split(".").slice( - 2);
            return (t.length > 1 ? ".": "") + t.join(".")
        }
        function a() {
            var e = (0, u.
        default)(v);
            if (!e) {
                e = d.
            default.v4();
                var t = 63072e6,
                n = r(g.
            default.hostname); (0, u.
            default)(v, e, {
                    maxage: t,
                    domain: n
                })
            }
            return e
        }
        function o() {
            if (document.referrer) {
                var e = (0, m.
            default)(document.referrer),
                t = e.hostname;
                if (r(t) !== r(g.
            default.hostname)) return {
                    source:
                    "Web",
                    view: {
                        url: document.referrer
                    }
                }
            }
        }
        function s() {
            return {
                id: {
                    client_id: a(),
                    experiment_id: ""
                },
                client: {
                    product: "",
                    platform: p.
                default.Mobile ? "MobileWeb": "DesktopWeb",
                    user_agent: p.
                default.UA
                },
                launch: o(),
                experiment: {}
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.
    default = s;
        var l = n(67),
        u = i(l),
        f = n(118),
        d = i(f),
        h = n(27),
        p = i(h),
        c = n(57),
        m = i(c),
        y = n(16),
        g = i(y),
        v = "_zap"
    },
    function(e, t) {
        "use strict";
        function n() {
            return {
                screen: screen.width + "x" + screen.height
            }
        }
        function i() {
            return {
                device: n()
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.
    default = i
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var r = n(29),
        a = i(r),
        o = n(8),
        s = i(o),
        l = n(9),
        u = i(l),
        f = function(e) {
            if (204 === e.status) return ! 1;
            var t = e.getResponseHeader("content-type");
            return t && t.indexOf("application/json") !== -1
        },
        d = function() {
            function e() {
                var t = this,
                n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; (0, s.
            default)(this, e),
                this.successCallbacks_ = [],
                this.errorCallbacks_ = [],
                this.completeCallbacks_ = [];
                var i = this.xhr_ = new XMLHttpRequest;
                i.open(n.method, n.url);
                var r = n.headers;
                r && (0, a.
            default)(r).forEach(function(e) {
                    i.setRequestHeader(e, r[e])
                }),
                i.onerror = function() {
                    t.runCallbacks_(t.errorCallbacks_),
                    t.runCallbacks_(t.completeCallbacks_)
                },
                i.onload = function() {
                    t.isOk() ? t.runCallbacks_(t.successCallbacks_) : t.runCallbacks_(t.errorCallbacks_),
                    t.runCallbacks_(t.completeCallbacks_)
                }
            }
            return (0, u.
        default)(e, [{
                key: "send",
                value: function(e) {
                    this.xhr_.send(e)
                }
            },
            {
                key: "addCallback_",
                value: function(e, t, n) {
                    this.xhr_.readyState === XMLHttpRequest.prototype.DONE ? n() && t.call(this, this.getResponse()) : e.push(t)
                }
            },
            {
                key: "getResponse",
                value: function() {
                    var e = this.xhr_.responseText;
                    return f(this.xhr_) ? (this.responseJson || (this.responseJson = JSON.parse(e)), this.responseJson) : e
                }
            },
            {
                key: "runCallbacks_",
                value: function(e) {
                    for (; e.length;) {
                        var t = e.shift();
                        t.call(this, this.getResponse())
                    }
                }
            },
            {
                key: "isOk",
                value: function() {
                    return this.xhr_.status >= 200 && this.xhr_.status < 300
                }
            },
            {
                key: "onSuccess",
                value: function(e) {
                    var t = this;
                    this.addCallback_(this.successCallbacks_, e,
                    function() {
                        return t.isOk()
                    })
                }
            },
            {
                key: "onError",
                value: function(e) {
                    var t = this;
                    this.addCallback_(this.errorCallbacks_, e,
                    function() {
                        return ! t.isOk()
                    })
                }
            },
            {
                key: "onComplete",
                value: function(e) {
                    this.addCallback_(this.completeCallbacks_, e,
                    function() {
                        return ! 0
                    })
                }
            }]),
            e
        } ();
        t.
    default = d
    },
    function(e, t) {
        "use strict";
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var n = function(e) {
            var t = void 0,
            n = !1;
            return function() {
                return n || (t = e.apply(void 0, arguments), n = !0),
                t
            }
        };
        t.once = n
    },
    function(e, t) {
        "use strict";
        function n(e) {
            return r.href = e,
            i.reduce(function(e, t) {
                return e[t] = r[t],
                e
            },
            {})
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        });
        var i = ["protocol", "host", "hostname", "port", "pathname", "search", "hash", "href"],
        r = document.createElement("a");
        t.
    default = n
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        function r() {
            if (!window.performance) return null;
            var e = performance.timing;
            return (e.loadEventEnd || Number(new Date)) - e.navigationStart
        }
        function a() {
            if (!window.performance) return null;
            var e = performance.timing,
            t = {};
            return f.forEach(function(n) {
                if (e[n] && !isNaN(e[n]) && 0 !== e[n]) {
                    var i = n.replace(/([A-Z])/g,
                    function(e) {
                        return "_" + e.toLowerCase()
                    });
                    t[i] = e[n] - e.navigationStart
                }
            }),
            t
        }
        function o(e) {
            return "/" === e[0] && (e = u.
        default.protocol + "//" + u.
        default.hostname + e),
            e
        }
        function s(e) {
            var t = e.type || "Page";
            return {
                type: t,
                request: {
                    remote: [{
                        url: o(e.url || u.
                    default.href),
                        latency: e.loadTime || r(),
                        type: "Http",
                        status: {
                            code: e.statusCode
                        }
                    }]
                },
                web_performance: "Page" === t ? a() : null
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.parse = s;
        var l = n(16),
        u = i(l),
        f = ["navigationStart", "unloadEventStart", "unloadEventEnd", "redirectStart", "redirectEnd", "fetchStart", "domainLookupStart", "domainLookupEnd", "connectStart", "connectEnd", "secureConnectionStart", "requestStart", "responseStart", "responseEnd", "domLoading", "domInteractive", "domContentLoadedEventStart", "domContentLoadedEventEnd", "domComplete", "loadEventStart", "loadEventEnd"]
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        function r(e) {
            var t = v.local.get(T);
            return t ? new DataView(e) : e
        }
        function a(e) {
            var t = c.
        default.UA,
            n = v.local.get(E),
            i = v.local.get(T),
            r = v.session.get(S),
            a = n === t;
            if (a && (i || r)) return void e();
            var o = I({
                transformPayload: function(e) {
                    return new DataView(e)
                }
            });
            o && o.onComplete(function(n) {
                v.session.set(S, !0),
                o.isOk() ? v.local.set(T, !0) : n && "DataViewSerializationError" === n.name && v.local.set(T, !1),
                v.local.set(E, t),
                e()
            })
        }
        function o(e) {
            return "function" == typeof e
        }
        function s(e, t, n) {
            if (!Array.isArray(t) || !t.length) throw new Error("logEntries cannot be null or empty.");
            if (n = (0, u.
        default)({},
            b, n), !n.apiHost) throw new Error("apiHost not found.");
            var i = "POST",
            r = "" + n.apiHost + e,
            a = {
                "X-ZA-Log-Version": d.version,
                "Content-Type": "application/x-protobuf"
            },
            s = t[0];
            s && s.base && s.base.client && (a["X-ZA-Product"] = s.base.client.product, a["X-ZA-Platform"] = s.base.client.platform),
            t.length && (a["X-ZA-Batch-Size"] = t.length);
            var l = new _(t).toArrayBuffer(),
            h = void 0;
            n.compress ? (a["Content-Encoding"] = "gzip", h = (0, f.gzip)(l).buffer) : h = l;
            var p = new g.
        default({
                method:
                i,
                url: r,
                headers: a
            });
            return p.send(o(n.transformPayload) ? n.transformPayload(h) : h),
            p
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.defaults = void 0;
        var l = n(28),
        u = i(l),
        f = n(108),
        d = n(17),
        h = i(d),
        p = n(27),
        c = i(p),
        m = n(56),
        y = n(55),
        g = i(y),
        v = n(60),
        _ = h.
    default.ZaLogBatchEntry,
        w = h.
    default.ZaLogEntry,
        b = {
            apiHost: "",
            compress: !0,
            transformPayload: null
        },
        E = "lastUA",
        T = "canUseDataViewPayload",
        S = "payloadVerified",
        I = (0, m.once)(function(e) {
            return s("/payload-verification", [new w({
                log_version: d.version
            })], e)
        });
        t.defaults = b,
        t.
    default = function(e, t, n) {
            a(function() {
                s(e, t, {
                    transformPayload: r
                }).onSuccess(n)
            })
        }
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        Object.defineProperty(t, "__esModule", {
            value: !0
        }),
        t.session = t.local = void 0;
        var r = n(15),
        a = i(r),
        o = new a.
    default("zap:storage:local", window.localStorage),
        s = new a.
    default("zap:storage:session", window.sessionStorage);
        t.local = o,
        t.session = s
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(68),
            __esModule: !0
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(69),
            __esModule: !0
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(70),
            __esModule: !0
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(72),
            __esModule: !0
        }
    },
    function(e, t, n) {
        e.exports = {
        default:
            n(73),
            __esModule: !0
        }
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            return e && e.__esModule ? e: {
            default:
                e
            }
        }
        t.__esModule = !0;
        var r = n(62),
        a = i(r),
        o = n(61),
        s = i(o);
        t.
    default = function() {
            function e(e, t) {
                var n = [],
                i = !0,
                r = !1,
                a = void 0;
                try {
                    for (var o, l = (0, s.
                default)(e); ! (i = (o = l.next()).done) && (n.push(o.value), !t || n.length !== t); i = !0);
                } catch(e) {
                    r = !0,
                    a = e
                } finally {
                    try { ! i && l.
                        return && l.
                        return ()
                    } finally {
                        if (r) throw a
                    }
                }
                return n
            }
            return function(t, n) {
                if (Array.isArray(t)) return t;
                if ((0, a.
            default)(Object(t))) return e(t, n);
                throw new TypeError("Invalid attempt to destructure non-iterable instance")
            }
        } ()
    },
    function(e, t, n) {
        function i(e, t, n) {
            n = n || {};
            var i = s(e) + "=" + s(t);
            null == t && (n.maxage = -1),
            n.maxage && (n.expires = new Date( + new Date + n.maxage)),
            n.path && (i += "; path=" + n.path),
            n.domain && (i += "; domain=" + n.domain),
            n.expires && (i += "; expires=" + n.expires.toUTCString()),
            n.secure && (i += "; secure"),
            document.cookie = i
        }
        function r() {
            var e;
            try {
                e = document.cookie
            } catch(e) {
                return "undefined" != typeof console && "function" == typeof console.error && console.error(e.stack || e),
                {}
            }
            return o(e)
        }
        function a(e) {
            return r()[e]
        }
        function o(e) {
            var t, n = {},
            i = e.split(/ *; */);
            if ("" == i[0]) return n;
            for (var r = 0; r < i.length; ++r) t = i[r].split("="),
            n[l(t[0])] = l(t[1]);
            return n
        }
        function s(e) {
            try {
                return encodeURIComponent(e)
            } catch(t) {
                u("error `encode(%o)` - %o", e, t)
            }
        }
        function l(e) {
            try {
                return decodeURIComponent(e)
            } catch(t) {
                u("error `decode(%o)` - %o", e, t)
            }
        }
        var u = n(105)("cookie");
        e.exports = function(e, t, n) {
            switch (arguments.length) {
            case 3:
            case 2:
                return i(e, t, n);
            case 1:
                return a(e);
            default:
                return r()
            }
        }
    },
    function(e, t, n) {
        n(43),
        n(42),
        e.exports = n(97)
    },
    function(e, t, n) {
        n(43),
        n(42),
        e.exports = n(98)
    },
    function(e, t, n) {
        var i = n(1),
        r = i.JSON || (i.JSON = {
            stringify: JSON.stringify
        });
        e.exports = function(e) {
            return r.stringify.apply(r, arguments)
        }
    },
    function(e, t, n) {
        n(100),
        e.exports = n(1).Object.assign
    },
    function(e, t, n) {
        n(101);
        var i = n(1).Object;
        e.exports = function(e, t) {
            return i.defineProperties(e, t)
        }
    },
    function(e, t, n) {
        n(102);
        var i = n(1).Object;
        e.exports = function(e, t, n) {
            return i.defineProperty(e, t, n)
        }
    },
    function(e, t, n) {
        n(103),
        e.exports = n(1).Object.keys
    },
    function(e, t) {
        e.exports = function(e) {
            if ("function" != typeof e) throw TypeError(e + " is not a function!");
            return e
        }
    },
    function(e, t) {
        e.exports = function() {}
    },
    function(e, t, n) {
        var i = n(23),
        r = n(94),
        a = n(93);
        e.exports = function(e) {
            return function(t, n, o) {
                var s, l = i(t),
                u = r(l.length),
                f = a(o, u);
                if (e && n != n) {
                    for (; u > f;) if (s = l[f++], s != s) return ! 0
                } else for (; u > f; f++) if ((e || f in l) && l[f] === n) return e || f || 0;
                return ! e && -1
            }
        }
    },
    function(e, t, n) {
        var i = n(75);
        e.exports = function(e, t, n) {
            if (i(e), void 0 === t) return e;
            switch (n) {
            case 1:
                return function(n) {
                    return e.call(t, n)
                };
            case 2:
                return function(n, i) {
                    return e.call(t, n, i)
                };
            case 3:
                return function(n, i, r) {
                    return e.call(t, n, i, r)
                }
            }
            return function() {
                return e.apply(t, arguments)
            }
        }
    },
    function(e, t, n) {
        e.exports = n(4).document && document.documentElement
    },
    function(e, t, n) {
        e.exports = !n(3) && !n(11)(function() {
            return 7 != Object.defineProperty(n(33)("div"), "a", {
                get: function() {
                    return 7
                }
            }).a
        })
    },
    function(e, t, n) {
        "use strict";
        var i = n(85),
        r = n(38),
        a = n(39),
        o = {};
        n(6)(o, n(2)("iterator"),
        function() {
            return this
        }),
        e.exports = function(e, t, n) {
            e.prototype = i(o, {
                next: r(1, n)
            }),
            a(e, t + " Iterator")
        }
    },
    function(e, t) {
        e.exports = function(e, t) {
            return {
                value: t,
                done: !!e
            }
        }
    },
    function(e, t) {
        e.exports = !0
    },
    function(e, t, n) {
        "use strict";
        var i = n(20),
        r = n(86),
        a = n(89),
        o = n(24),
        s = n(35),
        l = Object.assign;
        e.exports = !l || n(11)(function() {
            var e = {},
            t = {},
            n = Symbol(),
            i = "abcdefghijklmnopqrst";
            return e[n] = 7,
            i.split("").forEach(function(e) {
                t[e] = e
            }),
            7 != l({},
            e)[n] || Object.keys(l({},
            t)).join("") != i
        }) ?
        function(e, t) {
            for (var n = o(e), l = arguments.length, u = 1, f = r.f, d = a.f; l > u;) for (var h, p = s(arguments[u++]), c = f ? i(p).concat(f(p)) : i(p), m = c.length, y = 0; m > y;) d.call(p, h = c[y++]) && (n[h] = p[h]);
            return n
        }: l
    },
    function(e, t, n) {
        var i = n(10),
        r = n(37),
        a = n(34),
        o = n(21)("IE_PROTO"),
        s = function() {},
        l = "prototype",
        u = function() {
            var e, t = n(33)("iframe"),
            i = a.length,
            r = "<",
            o = ">";
            for (t.style.display = "none", n(79).appendChild(t), t.src = "javascript:", e = t.contentWindow.document, e.open(), e.write(r + "script" + o + "document.F=Object" + r + "/script" + o), e.close(), u = e.F; i--;) delete u[l][a[i]];
            return u()
        };
        e.exports = Object.create ||
        function(e, t) {
            var n;
            return null !== e ? (s[l] = i(e), n = new s, s[l] = null, n[o] = e) : n = u(),
            void 0 === t ? n: r(n, t)
        }
    },
    function(e, t) {
        t.f = Object.getOwnPropertySymbols
    },
    function(e, t, n) {
        var i = n(12),
        r = n(24),
        a = n(21)("IE_PROTO"),
        o = Object.prototype;
        e.exports = Object.getPrototypeOf ||
        function(e) {
            return e = r(e),
            i(e, a) ? e[a] : "function" == typeof e.constructor && e instanceof e.constructor ? e.constructor.prototype: e instanceof Object ? o: null
        }
    },
    function(e, t, n) {
        var i = n(12),
        r = n(23),
        a = n(77)(!1),
        o = n(21)("IE_PROTO");
        e.exports = function(e, t) {
            var n, s = r(e),
            l = 0,
            u = [];
            for (n in s) n != o && i(s, n) && u.push(n);
            for (; t.length > l;) i(s, n = t[l++]) && (~a(u, n) || u.push(n));
            return u
        }
    },
    function(e, t) {
        t.f = {}.propertyIsEnumerable
    },
    function(e, t, n) {
        var i = n(5),
        r = n(1),
        a = n(11);
        e.exports = function(e, t) {
            var n = (r.Object || {})[e] || Object[e],
            o = {};
            o[e] = t(n),
            i(i.S + i.F * a(function() {
                n(1)
            }), "Object", o)
        }
    },
    function(e, t, n) {
        e.exports = n(6)
    },
    function(e, t, n) {
        var i = n(22),
        r = n(18);
        e.exports = function(e) {
            return function(t, n) {
                var a, o, s = String(r(t)),
                l = i(n),
                u = s.length;
                return l < 0 || l >= u ? e ? "": void 0 : (a = s.charCodeAt(l), a < 55296 || a > 56319 || l + 1 === u || (o = s.charCodeAt(l + 1)) < 56320 || o > 57343 ? e ? s.charAt(l) : a: e ? s.slice(l, l + 2) : (a - 55296 << 10) + (o - 56320) + 65536)
            }
        }
    },
    function(e, t, n) {
        var i = n(22),
        r = Math.max,
        a = Math.min;
        e.exports = function(e, t) {
            return e = i(e),
            e < 0 ? r(e + t, 0) : a(e, t)
        }
    },
    function(e, t, n) {
        var i = n(22),
        r = Math.min;
        e.exports = function(e) {
            return e > 0 ? r(i(e), 9007199254740991) : 0
        }
    },
    function(e, t, n) {
        var i = n(19);
        e.exports = function(e, t) {
            if (!i(e)) return e;
            var n, r;
            if (t && "function" == typeof(n = e.toString) && !i(r = n.call(e))) return r;
            if ("function" == typeof(n = e.valueOf) && !i(r = n.call(e))) return r;
            if (!t && "function" == typeof(n = e.toString) && !i(r = n.call(e))) return r;
            throw TypeError("Can't convert object to primitive value")
        }
    },
    function(e, t, n) {
        var i = n(31),
        r = n(2)("iterator"),
        a = n(7);
        e.exports = n(1).getIteratorMethod = function(e) {
            if (void 0 != e) return e[r] || e["@@iterator"] || a[i(e)]
        }
    },
    function(e, t, n) {
        var i = n(10),
        r = n(96);
        e.exports = n(1).getIterator = function(e) {
            var t = r(e);
            if ("function" != typeof t) throw TypeError(e + " is not iterable!");
            return i(t.call(e))
        }
    },
    function(e, t, n) {
        var i = n(31),
        r = n(2)("iterator"),
        a = n(7);
        e.exports = n(1).isIterable = function(e) {
            var t = Object(e);
            return void 0 !== t[r] || "@@iterator" in t || a.hasOwnProperty(i(t))
        }
    },
    function(e, t, n) {
        "use strict";
        var i = n(76),
        r = n(82),
        a = n(7),
        o = n(23);
        e.exports = n(36)(Array, "Array",
        function(e, t) {
            this._t = o(e),
            this._i = 0,
            this._k = t
        },
        function() {
            var e = this._t,
            t = this._k,
            n = this._i++;
            return ! e || n >= e.length ? (this._t = void 0, r(1)) : "keys" == t ? r(0, n) : "values" == t ? r(0, e[n]) : r(0, [n, e[n]])
        },
        "values"),
        a.Arguments = a.Array,
        i("keys"),
        i("values"),
        i("entries")
    },
    function(e, t, n) {
        var i = n(5);
        i(i.S + i.F, "Object", {
            assign: n(84)
        })
    },
    function(e, t, n) {
        var i = n(5);
        i(i.S + i.F * !n(3), "Object", {
            defineProperties: n(37)
        })
    },
    function(e, t, n) {
        var i = n(5);
        i(i.S + i.F * !n(3), "Object", {
            defineProperty: n(13).f
        })
    },
    function(e, t, n) {
        var i = n(24),
        r = n(20);
        n(90)("keys",
        function() {
            return function(e) {
                return r(i(e))
            }
        })
    },
    function(e, t) {
        function n(e) {
            if (e = String(e), !(e.length > 1e4)) {
                var t = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);
                if (t) {
                    var n = parseFloat(t[1]),
                    i = (t[2] || "ms").toLowerCase();
                    switch (i) {
                    case "years":
                    case "year":
                    case "yrs":
                    case "yr":
                    case "y":
                        return n * f;
                    case "days":
                    case "day":
                    case "d":
                        return n * u;
                    case "hours":
                    case "hour":
                    case "hrs":
                    case "hr":
                    case "h":
                        return n * l;
                    case "minutes":
                    case "minute":
                    case "mins":
                    case "min":
                    case "m":
                        return n * s;
                    case "seconds":
                    case "second":
                    case "secs":
                    case "sec":
                    case "s":
                        return n * o;
                    case "milliseconds":
                    case "millisecond":
                    case "msecs":
                    case "msec":
                    case "ms":
                        return n;
                    default:
                        return
                    }
                }
            }
        }
        function i(e) {
            return e >= u ? Math.round(e / u) + "d": e >= l ? Math.round(e / l) + "h": e >= s ? Math.round(e / s) + "m": e >= o ? Math.round(e / o) + "s": e + "ms"
        }
        function r(e) {
            return a(e, u, "day") || a(e, l, "hour") || a(e, s, "minute") || a(e, o, "second") || e + " ms"
        }
        function a(e, t, n) {
            if (! (e < t)) return e < 1.5 * t ? Math.floor(e / t) + " " + n: Math.ceil(e / t) + " " + n + "s"
        }
        var o = 1e3,
        s = 60 * o,
        l = 60 * s,
        u = 24 * l,
        f = 365.25 * u;
        e.exports = function(e, t) {
            t = t || {};
            var a = typeof e;
            if ("string" === a && e.length > 0) return n(e);
            if ("number" === a && isNaN(e) === !1) return t.long ? r(e) : i(e);
            throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(e))
        }
    },
    function(e, t, n) { (function(i) {
            function r() {
                return "undefined" != typeof window && "undefined" != typeof window.process && "renderer" === window.process.type || ("undefined" != typeof document && "WebkitAppearance" in document.documentElement.style || "undefined" != typeof window && window.console && (console.firebug || console.exception && console.table) || navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))
            }
            function a(e) {
                var n = this.useColors;
                if (e[0] = (n ? "%c": "") + this.namespace + (n ? " %c": " ") + e[0] + (n ? "%c ": " ") + "+" + t.humanize(this.diff), n) {
                    var i = "color: " + this.color;
                    e.splice(1, 0, i, "color: inherit");
                    var r = 0,
                    a = 0;
                    e[0].replace(/%[a-zA-Z%]/g,
                    function(e) {
                        "%%" !== e && (r++, "%c" === e && (a = r))
                    }),
                    e.splice(a, 0, i)
                }
            }
            function o() {
                return "object" == typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments)
            }
            function s(e) {
                try {
                    null == e ? t.storage.removeItem("debug") : t.storage.debug = e
                } catch(e) {}
            }
            function l() {
                try {
                    return t.storage.debug
                } catch(e) {}
                if ("undefined" != typeof i && "env" in i) return i.env.DEBUG
            }
            function u() {
                try {
                    return window.localStorage
                } catch(e) {}
            }
            t = e.exports = n(106),
            t.log = o,
            t.formatArgs = a,
            t.save = s,
            t.load = l,
            t.useColors = r,
            t.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local: u(),
            t.colors = ["lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson"],
            t.formatters.j = function(e) {
                try {
                    return JSON.stringify(e)
                } catch(e) {
                    return "[UnexpectedJSONParseError]: " + e.message
                }
            },
            t.enable(l()),
            "undefined" != typeof window && (window.debug = t)
        }).call(t, n(46))
    },
    function(e, t, n) {
        function i(e) {
            var n, i = 0;
            for (n in e) i = (i << 5) - i + e.charCodeAt(n),
            i |= 0;
            return t.colors[Math.abs(i) % t.colors.length]
        }
        function r(e) {
            function n() {
                if (n.enabled) {
                    var e = n,
                    i = +new Date,
                    r = i - (u || i);
                    e.diff = r,
                    e.prev = u,
                    e.curr = i,
                    u = i;
                    for (var a = new Array(arguments.length), o = 0; o < a.length; o++) a[o] = arguments[o];
                    a[0] = t.coerce(a[0]),
                    "string" != typeof a[0] && a.unshift("%O");
                    var s = 0;
                    a[0] = a[0].replace(/%([a-zA-Z%])/g,
                    function(n, i) {
                        if ("%%" === n) return n;
                        s++;
                        var r = t.formatters[i];
                        if ("function" == typeof r) {
                            var o = a[s];
                            n = r.call(e, o),
                            a.splice(s, 1),
                            s--
                        }
                        return n
                    }),
                    t.formatArgs.call(e, a);
                    var l = n.log || t.log || console.log.bind(console);
                    l.apply(e, a)
                }
            }
            return n.namespace = e,
            n.enabled = t.enabled(e),
            n.useColors = t.useColors(),
            n.color = i(e),
            "function" == typeof t.init && t.init(n),
            n
        }
        function a(e) {
            t.save(e);
            for (var n = (e || "").split(/[\s,]+/), i = n.length, r = 0; r < i; r++) n[r] && (e = n[r].replace(/\*/g, ".*?"), "-" === e[0] ? t.skips.push(new RegExp("^" + e.substr(1) + "$")) : t.names.push(new RegExp("^" + e + "$")))
        }
        function o() {
            t.enable("")
        }
        function s(e) {
            var n, i;
            for (n = 0, i = t.skips.length; n < i; n++) if (t.skips[n].test(e)) return ! 1;
            for (n = 0, i = t.names.length; n < i; n++) if (t.names[n].test(e)) return ! 0;
            return ! 1
        }
        function l(e) {
            return e instanceof Error ? e.stack || e.message: e
        }
        t = e.exports = r.debug = r.
    default = r,
        t.coerce = l,
        t.disable = o,
        t.enable = a,
        t.enabled = s,
        t.humanize = n(104),
        t.names = [],
        t.skips = [],
        t.formatters = {};
        var u
    },
    function(e, t) {
        e.exports = {
            package: "com.zhihu.za.proto",
            options: {
                java_outer_classname: "ZaSessionProto",
                "(current_log_version)": "0.9.68"
            },
            messages: [{
                name: "ZaOptions",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "hv",
                    id: 1
                }]
            },
            {
                name: "ZaLogEntry",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "log_version",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "local_increment_id",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "LogType",
                    name: "log_type",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "BaseInfo",
                    name: "base",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "DetailInfo",
                    name: "detail",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "ExtraInfo",
                    name: "extra",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "StringLogInfo",
                    name: "string_log",
                    id: 7
                }],
                enums: [{
                    name: "LogType",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Event",
                        id: 1
                    },
                    {
                        name: "PageShow",
                        id: 2
                    },
                    {
                        name: "CardShow",
                        id: 3
                    },
                    {
                        name: "Ping",
                        id: 4
                    },
                    {
                        name: "Backend",
                        id: 5
                    },
                    {
                        name: "Crash",
                        id: 6
                    },
                    {
                        name: "Monitor",
                        id: 7
                    }]
                }]
            },
            {
                name: "StringLogInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "app_view_log",
                    id: 1
                }]
            },
            {
                name: "ZaLogBatchEntry",
                fields: [{
                    rule: "repeated",
                    type: "ZaLogEntry",
                    name: "entry",
                    id: 1
                }]
            },
            {
                name: "BaseInfo",
                fields: [{
                    rule: "optional",
                    type: "IDInfo",
                    name: "id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ClientInfo",
                    name: "client",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "TimeInfo",
                    name: "time",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "NetworkInfo",
                    name: "network",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "LaunchInfo",
                    name: "launch",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "TaskIDInfo",
                    name: "task_id",
                    id: 6,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "ExperimentInfo",
                    name: "experiment",
                    id: 7
                }]
            },
            {
                name: "User",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "People",
                        id: 1
                    },
                    {
                        name: "Org",
                        id: 2
                    },
                    {
                        name: "Guest",
                        id: 3
                    }]
                }]
            },
            {
                name: "IDInfo",
                fields: [{
                    rule: "optional",
                    type: "int64",
                    name: "user_id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "device_id",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "client_id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "response_id",
                    id: 4
                },
                {
                    rule: "repeated",
                    type: "string",
                    name: "experiment_id",
                    id: 5,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "session_id",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "session_index",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_user_id_day_new",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_user_id_hour_new",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_client_id_day_new",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_client_id_hour_new",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_device_id_day_new",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_device_id_hour_new",
                    id: 13
                },
                {
                    rule: "optional",
                    type: "User.Type",
                    name: "user_type",
                    id: 14
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_user_logged_in",
                    id: 15
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_valid_device",
                    id: 16
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "idfa",
                    id: 17
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "user_track_id",
                    id: 18
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "member_hash_id",
                    id: 19
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "guest_hash_id",
                    id: 20,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_guest_hash_id_day_new",
                    id: 21,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_guest_hash_id_hour_new",
                    id: 22,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_member_hash_id_day_new",
                    id: 23
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_member_hash_id_hour_new",
                    id: 24
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "deprecated_field",
                    id: 25,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "member_id",
                    id: 26
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_idfa_day_new",
                    id: 27
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_idfa_hour_new",
                    id: 28
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_current_week_active",
                    id: 29
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_retain_two_week",
                    id: 30
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_retain_three_week",
                    id: 31
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_retain_four_week",
                    id: 32
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_loyalty",
                    id: 33
                }]
            },
            {
                name: "Platform",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "DesktopWeb",
                        id: 1
                    },
                    {
                        name: "TabletWeb",
                        id: 2
                    },
                    {
                        name: "MobileWeb",
                        id: 3
                    },
                    {
                        name: "AndroidPhone",
                        id: 4
                    },
                    {
                        name: "AndroidPad",
                        id: 5
                    },
                    {
                        name: "iPhone",
                        id: 6
                    },
                    {
                        name: "iPad",
                        id: 7
                    }]
                }]
            },
            {
                name: "BackendService",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Search",
                        id: 1
                    },
                    {
                        name: "Ad",
                        id: 2
                    },
                    {
                        name: "ZA_APP",
                        id: 3
                    },
                    {
                        name: "Push",
                        id: 4
                    }]
                }]
            },
            {
                name: "Product",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Zhihu",
                        id: 1
                    },
                    {
                        name: "ZhihuDaily",
                        id: 2
                    },
                    {
                        name: "Dudu",
                        id: 3
                    },
                    {
                        name: "Zhi",
                        id: 4
                    },
                    {
                        name: "Trends",
                        id: 5
                    },
                    {
                        name: "Za",
                        id: 6
                    },
                    {
                        name: "Club",
                        id: 7
                    }]
                }]
            },
            {
                name: "UserAgent",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "agent_family",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "agent_major",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "agent_minor",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "agent_patch",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_family",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_major",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_minor",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_patch",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_patchMinor",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "device_family",
                    id: 10
                }]
            },
            {
                name: "AdSource",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "source",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "pub_id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "sub_pub_id",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "first_click_timestamp",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "last_click_timestamp",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "active_timestamp",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "first_lag",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "last_lag",
                    id: 9
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "IDFA",
                        id: 1
                    },
                    {
                        name: "IPUA",
                        id: 2
                    },
                    {
                        name: "MUID",
                        id: 3
                    }]
                }]
            },
            {
                name: "ClientInfo",
                fields: [{
                    rule: "optional",
                    type: "Product.Type",
                    name: "product",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "Platform.Type",
                    name: "platform",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "source",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "version_name",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "version_code",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "user_agent",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "BackendService.Type",
                    name: "service",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "UserAgent",
                    name: "normalized_user_agent",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "update_source",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "AdSource",
                    name: "ad_source",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_app_view",
                    id: 11
                }]
            },
            {
                name: "TimeInfo",
                fields: [{
                    rule: "optional",
                    type: "int64",
                    name: "client_timestamp",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "client_timezone",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "server_timestamp",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "date",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "hour",
                    id: 5
                }]
            },
            {
                name: "MobileNetwork",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "GPRS",
                        id: 1
                    },
                    {
                        name: "EDGE",
                        id: 2
                    },
                    {
                        name: "UMTS",
                        id: 3
                    },
                    {
                        name: "CDMA",
                        id: 4
                    },
                    {
                        name: "EVDO_0",
                        id: 5
                    },
                    {
                        name: "EVDO_A",
                        id: 6
                    },
                    {
                        name: "EVDO_B",
                        id: 7
                    },
                    {
                        name: "HSDPA",
                        id: 8
                    },
                    {
                        name: "HSUPA",
                        id: 9
                    },
                    {
                        name: "HSPA",
                        id: 10
                    },
                    {
                        name: "IDEN",
                        id: 11
                    },
                    {
                        name: "CDMA_1xRTT",
                        id: 12
                    },
                    {
                        name: "LTE",
                        id: 13
                    },
                    {
                        name: "EHRPD",
                        id: 14
                    },
                    {
                        name: "HSPAP",
                        id: 15
                    },
                    {
                        name: "GSM",
                        id: 16
                    },
                    {
                        name: "TD_SCDMA",
                        id: 17
                    },
                    {
                        name: "IWLAN",
                        id: 18
                    }]
                }]
            },
            {
                name: "NetworkInfo",
                fields: [{
                    rule: "optional",
                    type: "NetworkType",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "MobileNetwork.Type",
                    name: "mobile_network_type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "isp",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "internet_ip",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "ssid",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "country",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "province",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "city",
                    id: 8
                }],
                enums: [{
                    name: "NetworkType",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Wifi",
                        id: 1
                    },
                    {
                        name: "Cellular",
                        id: 2
                    },
                    {
                        name: "Bluetooth",
                        id: 3
                    },
                    {
                        name: "Ethernet",
                        id: 4
                    },
                    {
                        name: "Wimax",
                        id: 5
                    },
                    {
                        name: "Other",
                        id: 6
                    },
                    {
                        name: "None",
                        id: 7
                    }]
                }]
            },
            {
                name: "LaunchInfo",
                fields: [{
                    rule: "optional",
                    type: "Source",
                    name: "source",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ViewInfo",
                    name: "view",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "package_name",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "link",
                    id: 4
                }],
                enums: [{
                    name: "Source",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Shortcut",
                        id: 1
                    },
                    {
                        name: "Widge",
                        id: 2
                    },
                    {
                        name: "Web",
                        id: 3
                    },
                    {
                        name: "MobileWeb",
                        id: 4
                    },
                    {
                        name: "Notification",
                        id: 5
                    },
                    {
                        name: "Push",
                        id: 6
                    },
                    {
                        name: "App",
                        id: 7
                    },
                    {
                        name: "UniversalLink",
                        id: 8
                    },
                    {
                        name: "Scheme",
                        id: 9
                    }]
                }]
            },
            {
                name: "DetailInfo",
                fields: [{
                    rule: "optional",
                    type: "ViewInfo",
                    name: "view",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ViewInfo",
                    name: "last_event",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "RequestInfo",
                    name: "request_info",
                    id: 3,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "ViewInfo",
                    name: "referrer_event",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "browser_referrer",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "ViewInfo",
                    name: "intent_event",
                    id: 6
                }]
            },
            {
                name: "CallStatus",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "code",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "message",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "error_type",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "api_error_code",
                    id: 4
                }]
            },
            {
                name: "HttpMethod",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Get",
                        id: 1
                    },
                    {
                        name: "Post",
                        id: 2
                    },
                    {
                        name: "Delete",
                        id: 3
                    },
                    {
                        name: "Put",
                        id: 4
                    }]
                }]
            },
            {
                name: "ServiceInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "url",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "offset",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "limit",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "latency",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "address",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "CallStatus",
                    name: "status",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "request_body_bytes",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "response_body_bytes",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "HttpMethod.Type",
                    name: "http_method",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "request_bytes",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "response_bytes",
                    id: 13
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Http",
                        id: 1
                    },
                    {
                        name: "Zone",
                        id: 2
                    }]
                }]
            },
            {
                name: "RequestInfo",
                fields: [{
                    rule: "repeated",
                    type: "ServiceInfo",
                    name: "remote",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ServiceInfo",
                    name: "self",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "hit_cache",
                    id: 3,
                    options: {
                    default:
                        !1
                    }
                }]
            },
            {
                name: "Element",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Button",
                        id: 1
                    },
                    {
                        name: "Tab",
                        id: 2
                    },
                    {
                        name: "InputBox",
                        id: 3
                    },
                    {
                        name: "Text",
                        id: 4
                    },
                    {
                        name: "Link",
                        id: 5
                    },
                    {
                        name: "Image",
                        id: 6
                    },
                    {
                        name: "Page",
                        id: 7
                    },
                    {
                        name: "ListItem",
                        id: 8
                    },
                    {
                        name: "Card",
                        id: 9
                    },
                    {
                        name: "Dialog",
                        id: 10
                    },
                    {
                        name: "Select",
                        id: 11
                    },
                    {
                        name: "Menu",
                        id: 12
                    },
                    {
                        name: "Icon",
                        id: 13
                    },
                    {
                        name: "NotificationBar",
                        id: 14
                    },
                    {
                        name: "NavigationBar",
                        id: 15
                    },
                    {
                        name: "QRCode",
                        id: 16
                    },
                    {
                        name: "Audio",
                        id: 17
                    },
                    {
                        name: "Blockquote",
                        id: 18
                    }]
                }]
            },
            {
                name: "ElementName",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Title",
                        id: 1
                    },
                    {
                        name: "Body",
                        id: 2
                    },
                    {
                        name: "ViewAll",
                        id: 3
                    },
                    {
                        name: "Author",
                        id: 4
                    },
                    {
                        name: "End",
                        id: 5
                    },
                    {
                        name: "Full",
                        id: 6
                    },
                    {
                        name: "Comment",
                        id: 7
                    },
                    {
                        name: "FollowerList",
                        id: 8
                    },
                    {
                        name: "Post",
                        id: 9
                    },
                    {
                        name: "Column",
                        id: 10
                    },
                    {
                        name: "UnableSignIn",
                        id: 11
                    },
                    {
                        name: "SignIn",
                        id: 12
                    },
                    {
                        name: "SignUp",
                        id: 13
                    },
                    {
                        name: "SNSSignIn",
                        id: 14
                    },
                    {
                        name: "ResetPassword",
                        id: 15
                    },
                    {
                        name: "SMSSignIn",
                        id: 16
                    },
                    {
                        name: "SMSSignUp",
                        id: 17
                    },
                    {
                        name: "RequestAuthorization",
                        id: 18
                    },
                    {
                        name: "AllRightsReserved",
                        id: 19
                    },
                    {
                        name: "Copyright",
                        id: 20
                    },
                    {
                        name: "BookStore",
                        id: 21
                    },
                    {
                        name: "Collection",
                        id: 22
                    },
                    {
                        name: "Upvote",
                        id: 23
                    },
                    {
                        name: "Edit",
                        id: 24
                    },
                    {
                        name: "Report",
                        id: 25
                    },
                    {
                        name: "Invite",
                        id: 26
                    },
                    {
                        name: "ChooseOtherPurchaseChannel",
                        id: 27
                    },
                    {
                        name: "CustomMoney",
                        id: 28
                    },
                    {
                        name: "Wechat",
                        id: 29
                    },
                    {
                        name: "Balance",
                        id: 30
                    },
                    {
                        name: "Question",
                        id: 31
                    },
                    {
                        name: "InsufficientBalance",
                        id: 32
                    },
                    {
                        name: "Pay",
                        id: 33
                    },
                    {
                        name: "Topic",
                        id: 34
                    },
                    {
                        name: "Home",
                        id: 35
                    },
                    {
                        name: "UseDirection",
                        id: 36
                    },
                    {
                        name: "Coupon",
                        id: 37
                    },
                    {
                        name: "Help",
                        id: 38
                    },
                    {
                        name: "Phone",
                        id: 39
                    },
                    {
                        name: "Mail",
                        id: 40
                    },
                    {
                        name: "Category",
                        id: 41
                    },
                    {
                        name: "Recommend",
                        id: 42
                    },
                    {
                        name: "Subscription",
                        id: 43
                    },
                    {
                        name: "Purchase",
                        id: 44
                    },
                    {
                        name: "LiveAlbum",
                        id: 45
                    },
                    {
                        name: "Sign",
                        id: 46
                    },
                    {
                        name: "Close",
                        id: 47
                    },
                    {
                        name: "Answer",
                        id: 48
                    },
                    {
                        name: "Follower",
                        id: 49
                    },
                    {
                        name: "Enter",
                        id: 50
                    },
                    {
                        name: "User",
                        id: 51
                    },
                    {
                        name: "Evaluate",
                        id: 52
                    },
                    {
                        name: "Play",
                        id: 53
                    },
                    {
                        name: "MyCourse",
                        id: 54
                    },
                    {
                        name: "Message",
                        id: 55
                    },
                    {
                        name: "Interested",
                        id: 56
                    },
                    {
                        name: "Purchased",
                        id: 57
                    },
                    {
                        name: "WaitForEvaluate",
                        id: 58
                    },
                    {
                        name: "Detail",
                        id: 59
                    },
                    {
                        name: "PinList",
                        id: 60
                    },
                    {
                        name: "Download",
                        id: 61
                    },
                    {
                        name: "OpenApp",
                        id: 62
                    },
                    {
                        name: "Join",
                        id: 63
                    },
                    {
                        name: "Pin",
                        id: 64
                    },
                    {
                        name: "Next",
                        id: 65
                    }]
                }]
            },
            {
                name: "Action",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Click",
                        id: 1
                    },
                    {
                        name: "Hover",
                        id: 2
                    },
                    {
                        name: "Select",
                        id: 3
                    },
                    {
                        name: "Unselect",
                        id: 4
                    },
                    {
                        name: "Close",
                        id: 5
                    },
                    {
                        name: "Search",
                        id: 6
                    },
                    {
                        name: "Expand",
                        id: 7
                    },
                    {
                        name: "Collapse",
                        id: 8
                    },
                    {
                        name: "Ok",
                        id: 9
                    },
                    {
                        name: "Cancel",
                        id: 10
                    },
                    {
                        name: "Remove",
                        id: 11
                    },
                    {
                        name: "NextPage",
                        id: 12
                    },
                    {
                        name: "PrevPage",
                        id: 13
                    },
                    {
                        name: "GoPage",
                        id: 14
                    },
                    {
                        name: "OpenUrl",
                        id: 15
                    },
                    {
                        name: "StartInput",
                        id: 16
                    },
                    {
                        name: "Paste",
                        id: 17
                    },
                    {
                        name: "LoadNewFeed",
                        id: 18
                    },
                    {
                        name: "RollForMore",
                        id: 19
                    },
                    {
                        name: "AutoSave",
                        id: 20
                    },
                    {
                        name: "ViewNotification",
                        id: 21
                    },
                    {
                        name: "Switch",
                        id: 22
                    },
                    {
                        name: "Upvote",
                        id: 23
                    },
                    {
                        name: "UnUpvote",
                        id: 24
                    },
                    {
                        name: "Downvote",
                        id: 25
                    },
                    {
                        name: "UnDownvote",
                        id: 26
                    },
                    {
                        name: "Thank",
                        id: 27
                    },
                    {
                        name: "UnThank",
                        id: 28
                    },
                    {
                        name: "NoHelp",
                        id: 29
                    },
                    {
                        name: "UnNoHelp",
                        id: 30
                    },
                    {
                        name: "Follow",
                        id: 31
                    },
                    {
                        name: "UnFollow",
                        id: 32
                    },
                    {
                        name: "SignUp",
                        id: 33
                    },
                    {
                        name: "SignIn",
                        id: 34
                    },
                    {
                        name: "Back",
                        id: 35
                    },
                    {
                        name: "Exit",
                        id: 36
                    },
                    {
                        name: "StatusReport",
                        id: 37
                    },
                    {
                        name: "Ignore",
                        id: 38
                    },
                    {
                        name: "UnIgnore",
                        id: 39
                    },
                    {
                        name: "LoadMore",
                        id: 40
                    },
                    {
                        name: "BackToTop",
                        id: 41
                    },
                    {
                        name: "Refresh",
                        id: 42
                    },
                    {
                        name: "Collect",
                        id: 43
                    },
                    {
                        name: "UnCollect",
                        id: 44
                    },
                    {
                        name: "CommentIntent",
                        id: 45
                    },
                    {
                        name: "ShareIntent",
                        id: 46
                    },
                    {
                        name: "CollectIntent",
                        id: 47
                    },
                    {
                        name: "ReportIntent",
                        id: 48
                    },
                    {
                        name: "EndCommentIntent",
                        id: 49
                    },
                    {
                        name: "Pay",
                        id: 50
                    },
                    {
                        name: "Play",
                        id: 51
                    },
                    {
                        name: "PayIntent",
                        id: 52
                    },
                    {
                        name: "Send",
                        id: 53
                    },
                    {
                        name: "StartRecord",
                        id: 54
                    },
                    {
                        name: "EndRecord",
                        id: 55
                    },
                    {
                        name: "Like",
                        id: 56
                    },
                    {
                        name: "StopPlay",
                        id: 57
                    },
                    {
                        name: "EndPlay",
                        id: 58
                    },
                    {
                        name: "Mute",
                        id: 59
                    },
                    {
                        name: "UnMute",
                        id: 60
                    },
                    {
                        name: "Ban",
                        id: 61
                    },
                    {
                        name: "UnBan",
                        id: 62
                    },
                    {
                        name: "Load",
                        id: 63
                    },
                    {
                        name: "Hide",
                        id: 64
                    },
                    {
                        name: "Share",
                        id: 65
                    },
                    {
                        name: "SwipeLeft",
                        id: 66
                    },
                    {
                        name: "SwipeRight",
                        id: 67
                    },
                    {
                        name: "VoteIntent",
                        id: 68
                    },
                    {
                        name: "MentionIntent",
                        id: 69
                    },
                    {
                        name: "QuestionIntent",
                        id: 70
                    },
                    {
                        name: "Invite",
                        id: 71
                    },
                    {
                        name: "UnInvite",
                        id: 72
                    },
                    {
                        name: "Download",
                        id: 73
                    },
                    {
                        name: "Continue",
                        id: 74
                    },
                    {
                        name: "Report",
                        id: 75
                    },
                    {
                        name: "Give",
                        id: 76
                    },
                    {
                        name: "Receive",
                        id: 77
                    },
                    {
                        name: "Redeem",
                        id: 78
                    },
                    {
                        name: "Charge",
                        id: 79
                    },
                    {
                        name: "GetCaptcha",
                        id: 80
                    },
                    {
                        name: "ResetPassword",
                        id: 81
                    },
                    {
                        name: "Skip",
                        id: 82
                    },
                    {
                        name: "Preview",
                        id: 83
                    },
                    {
                        name: "Read",
                        id: 84
                    },
                    {
                        name: "Authorize",
                        id: 85
                    },
                    {
                        name: "Delete",
                        id: 86
                    },
                    {
                        name: "Upload",
                        id: 87
                    },
                    {
                        name: "AutoPlay",
                        id: 88
                    },
                    {
                        name: "Fold",
                        id: 89
                    },
                    {
                        name: "Scroll",
                        id: 90
                    },
                    {
                        name: "Comment",
                        id: 91
                    },
                    {
                        name: "EndComment",
                        id: 92
                    },
                    {
                        name: "Mention",
                        id: 93
                    },
                    {
                        name: "Question",
                        id: 94
                    },
                    {
                        name: "Vote",
                        id: 95
                    },
                    {
                        name: "Answer",
                        id: 96
                    },
                    {
                        name: "Post",
                        id: 97
                    },
                    {
                        name: "AutoRefresh",
                        id: 98
                    },
                    {
                        name: "Message",
                        id: 99
                    },
                    {
                        name: "UnFold",
                        id: 100
                    },
                    {
                        name: "OneStepRefresh",
                        id: 101
                    },
                    {
                        name: "ScrollToBottom",
                        id: 102
                    },
                    {
                        name: "Pin",
                        id: 103
                    },
                    {
                        name: "Launch",
                        id: 104
                    },
                    {
                        name: "SMSSignUp",
                        id: 105
                    },
                    {
                        name: "SNSSignIn",
                        id: 106
                    },
                    {
                        name: "Active",
                        id: 107
                    },
                    {
                        name: "Terminate",
                        id: 108
                    },
                    {
                        name: "InActive",
                        id: 109
                    },
                    {
                        name: "Logout",
                        id: 110
                    },
                    {
                        name: "Open",
                        id: 111
                    },
                    {
                        name: "Subscribe",
                        id: 112
                    },
                    {
                        name: "Anonymize",
                        id: 113
                    },
                    {
                        name: "Tip",
                        id: 114
                    },
                    {
                        name: "UnSubscribe",
                        id: 115
                    },
                    {
                        name: "UnAnonymize",
                        id: 116
                    },
                    {
                        name: "Live",
                        id: 117
                    },
                    {
                        name: "UnLike",
                        id: 118
                    },
                    {
                        name: "AddCalendar",
                        id: 119
                    },
                    {
                        name: "CopyLink",
                        id: 120
                    },
                    {
                        name: "Evaluate",
                        id: 121
                    },
                    {
                        name: "Add",
                        id: 122
                    },
                    {
                        name: "Connect",
                        id: 123
                    },
                    {
                        name: "Forward",
                        id: 124
                    },
                    {
                        name: "Pause",
                        id: 125
                    },
                    {
                        name: "Backward",
                        id: 126
                    },
                    {
                        name: "RefreshAll",
                        id: 127
                    },
                    {
                        name: "PullForMore",
                        id: 128
                    },
                    {
                        name: "AscOrder",
                        id: 129
                    },
                    {
                        name: "DescOrder",
                        id: 130
                    },
                    {
                        name: "Zhi",
                        id: 131
                    }]
                }]
            },
            {
                name: "Module",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "AnswerItem",
                        id: 1
                    },
                    {
                        name: "PostItem",
                        id: 2
                    },
                    {
                        name: "QuestionItem",
                        id: 3
                    },
                    {
                        name: "RoundtableItem",
                        id: 4
                    },
                    {
                        name: "TopicItem",
                        id: 5
                    },
                    {
                        name: "UserItem",
                        id: 6
                    },
                    {
                        name: "LogItem",
                        id: 7
                    },
                    {
                        name: "CollectionItem",
                        id: 8
                    },
                    {
                        name: "CommentItem",
                        id: 9
                    },
                    {
                        name: "FeedItem",
                        id: 10
                    },
                    {
                        name: "HoverCard",
                        id: 11
                    },
                    {
                        name: "HomeFeedList",
                        id: 12
                    },
                    {
                        name: "TopStoryFeedList",
                        id: 13
                    },
                    {
                        name: "SignInForm",
                        id: 14
                    },
                    {
                        name: "SignUpForm",
                        id: 15
                    },
                    {
                        name: "SignInDialog",
                        id: 16
                    },
                    {
                        name: "SignUpDialog",
                        id: 17
                    },
                    {
                        name: "SNSSignIn",
                        id: 18
                    },
                    {
                        name: "VoteInfo",
                        id: 19
                    },
                    {
                        name: "VoteBar",
                        id: 20
                    },
                    {
                        name: "FeedSource",
                        id: 21
                    },
                    {
                        name: "RelatedQuestions",
                        id: 22
                    },
                    {
                        name: "Captcha",
                        id: 23
                    },
                    {
                        name: "HomeTopics",
                        id: 24
                    },
                    {
                        name: "PayCard",
                        id: 25
                    },
                    {
                        name: "MessageItem",
                        id: 26
                    },
                    {
                        name: "Toast",
                        id: 27
                    },
                    {
                        name: "SnackBar",
                        id: 28
                    },
                    {
                        name: "ToolBar",
                        id: 29
                    },
                    {
                        name: "LiveItem",
                        id: 30
                    },
                    {
                        name: "ShareCard",
                        id: 31
                    },
                    {
                        name: "Column",
                        id: 32
                    },
                    {
                        name: "ColumnItem",
                        id: 33
                    },
                    {
                        name: "Roundtable",
                        id: 34
                    },
                    {
                        name: "BottomBar",
                        id: 35
                    },
                    {
                        name: "CommentEditView",
                        id: 36
                    },
                    {
                        name: "FloatingActionButton",
                        id: 37
                    },
                    {
                        name: "MoreAction",
                        id: 38
                    },
                    {
                        name: "PostEditView",
                        id: 39
                    },
                    {
                        name: "QuestionEditView",
                        id: 40
                    },
                    {
                        name: "AnswerEditView",
                        id: 41
                    },
                    {
                        name: "TitleEditView",
                        id: 42
                    },
                    {
                        name: "TopicEditView",
                        id: 43
                    },
                    {
                        name: "DescribeEditView",
                        id: 44
                    },
                    {
                        name: "MentionUserList",
                        id: 45
                    },
                    {
                        name: "TopNavBar",
                        id: 46
                    },
                    {
                        name: "AdItem",
                        id: 47
                    },
                    {
                        name: "AdMenu",
                        id: 48
                    },
                    {
                        name: "SearchResultItem",
                        id: 49
                    },
                    {
                        name: "SearchAutocompleteList",
                        id: 50
                    },
                    {
                        name: "ReportDialog",
                        id: 51
                    },
                    {
                        name: "ReportItem",
                        id: 52
                    },
                    {
                        name: "HarmfulDialog",
                        id: 53
                    },
                    {
                        name: "ActionSheet",
                        id: 54
                    },
                    {
                        name: "SearchResultList",
                        id: 55
                    },
                    {
                        name: "RightSideBar",
                        id: 56
                    },
                    {
                        name: "RecoverPasswordForm",
                        id: 57
                    },
                    {
                        name: "ResetPasswordForm",
                        id: 58
                    },
                    {
                        name: "SMSSignUpForm",
                        id: 59
                    },
                    {
                        name: "SMSSignInForm",
                        id: 60
                    },
                    {
                        name: "SMSVerificationForm",
                        id: 61
                    },
                    {
                        name: "UnableSignInForm",
                        id: 62
                    },
                    {
                        name: "RecordCard",
                        id: 63
                    },
                    {
                        name: "ImagePicker",
                        id: 64
                    },
                    {
                        name: "MemberArea",
                        id: 65
                    },
                    {
                        name: "TopAnswerer",
                        id: 66
                    },
                    {
                        name: "ValidationReminderItem",
                        id: 67
                    },
                    {
                        name: "AvatarReminderItem",
                        id: 68
                    },
                    {
                        name: "HeadlineReminderItem",
                        id: 69
                    },
                    {
                        name: "SuggestedQuestionsItem",
                        id: 70
                    },
                    {
                        name: "PromotionItem",
                        id: 71
                    },
                    {
                        name: "ExternalAdItem",
                        id: 72
                    },
                    {
                        name: "EBookItem",
                        id: 73
                    },
                    {
                        name: "ProfileHeader",
                        id: 74
                    },
                    {
                        name: "PurchaseChannelDialog",
                        id: 75
                    },
                    {
                        name: "RecentlyViewedDialog",
                        id: 76
                    },
                    {
                        name: "TopicIndexItem",
                        id: 77
                    },
                    {
                        name: "TopicIndexList",
                        id: 78
                    },
                    {
                        name: "CommentCard",
                        id: 79
                    },
                    {
                        name: "FoldedArea",
                        id: 80
                    },
                    {
                        name: "CommentList",
                        id: 81
                    },
                    {
                        name: "AnswerList",
                        id: 82
                    },
                    {
                        name: "Bubble",
                        id: 83
                    },
                    {
                        name: "RelatedLives",
                        id: 84
                    },
                    {
                        name: "TopicList",
                        id: 85
                    },
                    {
                        name: "SearchBox",
                        id: 86
                    },
                    {
                        name: "RelatedTopics",
                        id: 87
                    },
                    {
                        name: "QuestionList",
                        id: 88
                    },
                    {
                        name: "ChargeCard",
                        id: 89
                    },
                    {
                        name: "LiveBanner",
                        id: 90
                    },
                    {
                        name: "ContentList",
                        id: 91
                    },
                    {
                        name: "UserList",
                        id: 92
                    },
                    {
                        name: "ColumnList",
                        id: 93
                    },
                    {
                        name: "HomeEntry",
                        id: 94
                    },
                    {
                        name: "InstallShortcut",
                        id: 95
                    },
                    {
                        name: "Banner",
                        id: 96
                    },
                    {
                        name: "FeedList",
                        id: 97
                    },
                    {
                        name: "SharePin",
                        id: 98
                    },
                    {
                        name: "PinItem",
                        id: 99
                    },
                    {
                        name: "CouponItem",
                        id: 100
                    },
                    {
                        name: "CouponList",
                        id: 101
                    },
                    {
                        name: "ConfirmForm",
                        id: 102
                    },
                    {
                        name: "EventItem",
                        id: 103
                    },
                    {
                        name: "LiveList",
                        id: 104
                    },
                    {
                        name: "EBookList",
                        id: 105
                    },
                    {
                        name: "EBookSpecialItem",
                        id: 106
                    },
                    {
                        name: "LiveAlbumItem",
                        id: 107
                    },
                    {
                        name: "InvitationCard",
                        id: 108
                    },
                    {
                        name: "CollectionList",
                        id: 109
                    },
                    {
                        name: "SignForm",
                        id: 110
                    },
                    {
                        name: "EditorRecommendList",
                        id: 111
                    },
                    {
                        name: "RemixAlbumItem",
                        id: 112
                    },
                    {
                        name: "RemixItem",
                        id: 113
                    },
                    {
                        name: "IgnoreCard",
                        id: 114
                    },
                    {
                        name: "InvitationFrame",
                        id: 115
                    },
                    {
                        name: "CollectionDialogue",
                        id: 116
                    },
                    {
                        name: "LiveCourseItem",
                        id: 117
                    },
                    {
                        name: "VideoItem",
                        id: 118
                    }]
                }]
            },
            {
                name: "ViewLocation",
                fields: [{
                    rule: "optional",
                    type: "Module.Type",
                    name: "module",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "index",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_ad",
                    id: 3,
                    options: {
                    default:
                        !1
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "module_name",
                    id: 4
                }]
            },
            {
                name: "ViewInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "url",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "normalized_url",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "Action.Type",
                    name: "action",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "Element.Type",
                    name: "element",
                    id: 4
                },
                {
                    rule: "repeated",
                    type: "ViewLocation",
                    name: "path",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "ElementName.Type",
                    name: "element_name",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_intent",
                    id: 8,
                    options: {
                    default:
                        !1
                    }
                }]
            },
            {
                name: "StatusResult",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Success",
                        id: 1
                    },
                    {
                        name: "Fail",
                        id: 2
                    },
                    {
                        name: "BadCaptcha",
                        id: 3
                    },
                    {
                        name: "BackToTop",
                        id: 4
                    },
                    {
                        name: "Refresh",
                        id: 5
                    },
                    {
                        name: "Bubble",
                        id: 6
                    },
                    {
                        name: "OneStepRefresh",
                        id: 7
                    },
                    {
                        name: "AutoRefresh",
                        id: 8
                    }]
                }]
            },
            {
                name: "ExtraInfo",
                fields: [{
                    rule: "optional",
                    type: "DeviceInfo",
                    name: "device",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "AccountInfo",
                    name: "account",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "ContentInfo",
                    name: "content",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "SearchInfo",
                    name: "search",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "StatusInfo",
                    name: "status",
                    id: 5
                },
                {
                    rule: "repeated",
                    type: "ModuleInfo",
                    name: "module",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "UrlInfo",
                    name: "link",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "CaptchaInfo",
                    name: "captcha",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "NotificationInfo",
                    name: "notification",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "PaymentInfo",
                    name: "payment",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "ZaErrorInfo",
                    name: "za_error_info",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "ButtonInfo",
                    name: "button",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "ShareInfo",
                    name: "share",
                    id: 13
                },
                {
                    rule: "optional",
                    type: "ExperimentInfo",
                    name: "experiment",
                    id: 14,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "VerticalInfo",
                    name: "vertical",
                    id: 15
                },
                {
                    rule: "optional",
                    type: "PlayInfo",
                    name: "play",
                    id: 16
                },
                {
                    rule: "optional",
                    type: "TaskIDInfo",
                    name: "task_id",
                    id: 17
                },
                {
                    rule: "optional",
                    type: "ReportInfo",
                    name: "report",
                    id: 18
                },
                {
                    rule: "optional",
                    type: "RequestInfo",
                    name: "request",
                    id: 19
                },
                {
                    rule: "optional",
                    type: "MonitorInfo",
                    name: "monitor",
                    id: 20
                },
                {
                    rule: "optional",
                    type: "UTMInfo",
                    name: "utm",
                    id: 21
                },
                {
                    rule: "optional",
                    type: "ReadInfo",
                    name: "read",
                    id: 22
                },
                {
                    rule: "optional",
                    type: "AttachedInfo",
                    name: "attached_info",
                    id: 23
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "attached_info_bytes",
                    id: 24
                },
                {
                    rule: "optional",
                    type: "MessageInfo",
                    name: "message",
                    id: 25
                }]
            },
            {
                name: "PlayInfo",
                fields: [{
                    rule: "optional",
                    type: "int64",
                    name: "duration",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "elapsed",
                    id: 2
                }]
            },
            {
                name: "PaymentInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "double",
                    name: "money",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "id",
                    id: 3
                },
                {
                    rule: "repeated",
                    type: "CommodityInfo",
                    name: "commodity",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "CurrencyType.Type",
                    name: "currency_type",
                    id: 5
                },
                {
                    rule: "repeated",
                    type: "CouponInfo",
                    name: "coupon",
                    id: 6
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Wechat",
                        id: 1
                    },
                    {
                        name: "Alipay",
                        id: 2
                    },
                    {
                        name: "IAP",
                        id: 3
                    },
                    {
                        name: "Balance",
                        id: 4
                    }]
                }]
            },
            {
                name: "CouponInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "index",
                    id: 2
                }]
            },
            {
                name: "CommodityInfo",
                fields: [{
                    rule: "optional",
                    type: "ContentInfo",
                    name: "content",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "double",
                    name: "list_price",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "double",
                    name: "sale_price",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "quantity",
                    id: 4
                }]
            },
            {
                name: "AccountType",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Zhihu",
                        id: 1
                    },
                    {
                        name: "Wechat",
                        id: 2
                    },
                    {
                        name: "Weibo",
                        id: 3
                    },
                    {
                        name: "QQ",
                        id: 4
                    }]
                }]
            },
            {
                name: "AccountInfo",
                fields: [{
                    rule: "optional",
                    type: "AccountType.Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "email",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "phone",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "group",
                    id: 5
                }]
            },
            {
                name: "ContentType",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "User",
                        id: 1
                    },
                    {
                        name: "Topic",
                        id: 2
                    },
                    {
                        name: "Question",
                        id: 3
                    },
                    {
                        name: "Answer",
                        id: 4
                    },
                    {
                        name: "Column",
                        id: 5
                    },
                    {
                        name: "Collection",
                        id: 6
                    },
                    {
                        name: "Post",
                        id: 7
                    },
                    {
                        name: "Comment",
                        id: 8
                    },
                    {
                        name: "Roundtable",
                        id: 9
                    },
                    {
                        name: "Message",
                        id: 10
                    },
                    {
                        name: "Live",
                        id: 11
                    },
                    {
                        name: "ZhiMessage",
                        id: 12
                    },
                    {
                        name: "LiveMessage",
                        id: 13
                    },
                    {
                        name: "Ad",
                        id: 14
                    },
                    {
                        name: "EBook",
                        id: 15
                    },
                    {
                        name: "Log",
                        id: 16
                    },
                    {
                        name: "Promotion",
                        id: 17
                    },
                    {
                        name: "EBookSeries",
                        id: 18
                    },
                    {
                        name: "LiveCategory",
                        id: 19
                    },
                    {
                        name: "ExternalAd",
                        id: 20
                    },
                    {
                        name: "TopicIndex",
                        id: 21
                    },
                    {
                        name: "Pin",
                        id: 22
                    },
                    {
                        name: "Coupon",
                        id: 23
                    },
                    {
                        name: "Event",
                        id: 24
                    },
                    {
                        name: "LiveAlbum",
                        id: 25
                    },
                    {
                        name: "EBookSpecial",
                        id: 26
                    },
                    {
                        name: "RemixAlbum",
                        id: 27
                    },
                    {
                        name: "Remix",
                        id: 28
                    },
                    {
                        name: "LiveCourse",
                        id: 29
                    },
                    {
                        name: "Video",
                        id: 30
                    }]
                }]
            },
            {
                name: "ContentStatus",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "End",
                        id: 1
                    }]
                }]
            },
            {
                name: "ContentInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ContentType.Type",
                    name: "type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "snippet",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "author_id",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "parent_id",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "upvote_num",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "comment_num",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "item_num",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "follower_num",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "publish_timestamp",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "action_timestmap",
                    id: 11,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "token",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_ad",
                    id: 13,
                    options: {
                    default:
                        !1
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "parent_token",
                    id: 14
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "member_hash_id",
                    id: 15
                },
                {
                    rule: "optional",
                    type: "AdInfo",
                    name: "ad_info",
                    id: 16
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "author_token",
                    id: 17
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "author_member_hash_id",
                    id: 18
                },
                {
                    rule: "optional",
                    type: "ContentStatus.Type",
                    name: "status_type",
                    id: 19
                }]
            },
            {
                name: "Os",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Android",
                        id: 1
                    },
                    {
                        name: "iOS",
                        id: 2
                    },
                    {
                        name: "OsX",
                        id: 3
                    },
                    {
                        name: "Windows",
                        id: 4
                    }]
                }]
            },
            {
                name: "DeviceInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "os_str",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "Os.Type",
                    name: "os_type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "os_version",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "os_bit",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "sdk_level",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "model",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "brand",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_root",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "rom_version",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "rom_name",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "cpu",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "screen",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "mac_addr",
                    id: 13
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "imei",
                    id: 14
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "memory",
                    id: 15
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "sd_card_1",
                    id: 16
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "sd_card_2",
                    id: 17
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "imsi_1",
                    id: 18
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "imsi_2",
                    id: 19
                }]
            },
            {
                name: "SearchInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "raw_query",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "query",
                    id: 2
                },
                {
                    rule: "repeated",
                    type: "ContentType.Type",
                    name: "restrict_type",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "estimated_num",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "ListInfo",
                    name: "result",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_complete_query",
                    id: 6,
                    options: {
                    default:
                        !0
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "next_query",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "time_to_next_query",
                    id: 8
                }]
            },
            {
                name: "StatusInfo",
                fields: [{
                    rule: "optional",
                    type: "StatusType",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "StatusResult.Type",
                    name: "result",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "error_message",
                    id: 3,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "ViewInfo",
                    name: "event",
                    id: 4
                },
                {
                    rule: "repeated",
                    type: "string",
                    name: "error_msg",
                    id: 5
                }],
                enums: [{
                    name: "StatusType",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "End",
                        id: 1
                    }]
                }]
            },
            {
                name: "ModuleInfo",
                fields: [{
                    rule: "optional",
                    type: "CardInfo",
                    name: "card",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ListInfo",
                    name: "list",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "AttachedInfo",
                    name: "attach",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "attached_info_bytes",
                    id: 4
                }]
            },
            {
                name: "CardInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "card_type",
                    id: 1
                },
                {
                    rule: "repeated",
                    type: "ContentInfo",
                    name: "content",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "FeedSource",
                    name: "feed_source",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "feed_id",
                    id: 4
                }],
                messages: [{
                    name: "FeedSource",
                    fields: [{
                        rule: "repeated",
                        type: "string",
                        name: "actor_id",
                        id: 1
                    },
                    {
                        rule: "optional",
                        type: "ContentType.Type",
                        name: "actor_type",
                        id: 2
                    },
                    {
                        rule: "optional",
                        type: "ActionType",
                        name: "action_type",
                        id: 3
                    },
                    {
                        rule: "optional",
                        type: "int64",
                        name: "action_timestamp",
                        id: 4
                    },
                    {
                        rule: "repeated",
                        type: "string",
                        name: "actor_token",
                        id: 5
                    },
                    {
                        rule: "repeated",
                        type: "string",
                        name: "actor_member_hash_id",
                        id: 6
                    }],
                    enums: [{
                        name: "ActionType",
                        values: [{
                            name: "Unknown",
                            id: 0
                        },
                        {
                            name: "Follow",
                            id: 1
                        },
                        {
                            name: "Publish",
                            id: 2
                        },
                        {
                            name: "Upvote",
                            id: 3
                        },
                        {
                            name: "Answer",
                            id: 4
                        },
                        {
                            name: "Recommend",
                            id: 5
                        },
                        {
                            name: "Join",
                            id: 6
                        },
                        {
                            name: "Collect",
                            id: 7
                        }]
                    }]
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Content",
                        id: 1
                    },
                    {
                        name: "PopularTopics",
                        id: 2
                    },
                    {
                        name: "SuggestedTopics",
                        id: 3
                    },
                    {
                        name: "ValidationReminder",
                        id: 4
                    },
                    {
                        name: "AvatarReminder",
                        id: 5
                    },
                    {
                        name: "HeadlineReminder",
                        id: 6
                    },
                    {
                        name: "Feed",
                        id: 7
                    },
                    {
                        name: "SuggestedUsers",
                        id: 8
                    },
                    {
                        name: "LiveBanner",
                        id: 9
                    },
                    {
                        name: "SuggestedQuestions",
                        id: 10
                    }]
                }]
            },
            {
                name: "ListSection",
                fields: [{
                    rule: "optional",
                    type: "ContentType.Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "num",
                    id: 3
                }]
            },
            {
                name: "ListInfo",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "list_size",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "new_item_size",
                    id: 2
                },
                {
                    rule: "repeated",
                    type: "CardInfo",
                    name: "card",
                    id: 3
                },
                {
                    rule: "repeated",
                    type: "ListSection",
                    name: "section",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "feed_id",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 6
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "PopularTopics",
                        id: 1
                    },
                    {
                        name: "SuggestedTopics",
                        id: 2
                    },
                    {
                        name: "SuggestedUsers",
                        id: 3
                    },
                    {
                        name: "LiveBanner",
                        id: 4
                    },
                    {
                        name: "EBook",
                        id: 5
                    },
                    {
                        name: "RemixAlbum",
                        id: 6
                    }]
                }]
            },
            {
                name: "UrlInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "url",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "anchor",
                    id: 2
                }]
            },
            {
                name: "CaptchaInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "id",
                    id: 2
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "English",
                        id: 1
                    },
                    {
                        name: "Chinese",
                        id: 2
                    }]
                }]
            },
            {
                name: "NotificationInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "title",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "url",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "sent_timestamp",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "action",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "NotificationSource",
                    name: "notification_source",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "batch_id",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "ContentType.Type",
                    name: "type",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "server_timestamp",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "content",
                    id: 10
                }],
                messages: [{
                    name: "NotificationSource",
                    fields: [{
                        rule: "optional",
                        type: "ContentType.Type",
                        name: "actor_type",
                        id: 1
                    },
                    {
                        rule: "optional",
                        type: "ActionType",
                        name: "action_type",
                        id: 2
                    }],
                    enums: [{
                        name: "ActionType",
                        values: [{
                            name: "Unknown",
                            id: 0
                        },
                        {
                            name: "Follow",
                            id: 1
                        },
                        {
                            name: "Publish",
                            id: 2
                        },
                        {
                            name: "Upvote",
                            id: 3
                        },
                        {
                            name: "Answer",
                            id: 4
                        },
                        {
                            name: "Recommend",
                            id: 5
                        },
                        {
                            name: "Message",
                            id: 6
                        },
                        {
                            name: "Mention",
                            id: 7
                        },
                        {
                            name: "Comment",
                            id: 8
                        },
                        {
                            name: "Response",
                            id: 9
                        },
                        {
                            name: "Thank",
                            id: 10
                        },
                        {
                            name: "Like",
                            id: 11
                        },
                        {
                            name: "Invite",
                            id: 12
                        },
                        {
                            name: "Start",
                            id: 13
                        }]
                    }]
                }]
            },
            {
                name: "ZaLog",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "ZaLogEntry",
                        id: 1
                    },
                    {
                        name: "ZaLogBatchEntry",
                        id: 2
                    }]
                }]
            },
            {
                name: "LogServerError",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "GZipDecompress",
                        id: 1
                    },
                    {
                        name: "ProtobufDecode",
                        id: 2
                    }]
                }]
            },
            {
                name: "ZaErrorInfo",
                fields: [{
                    rule: "optional",
                    type: "ZaLog.Type",
                    name: "log_type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "LogServerError.Type",
                    name: "error_type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "error_msg",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "batch_size",
                    id: 4
                }]
            },
            {
                name: "ButtonInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "text",
                    id: 1
                }]
            },
            {
                name: "CurrencyType",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "CNY",
                        id: 1
                    },
                    {
                        name: "USD",
                        id: 2
                    },
                    {
                        name: "EUR",
                        id: 3
                    },
                    {
                        name: "JPY",
                        id: 4
                    },
                    {
                        name: "BEAN",
                        id: 5
                    }]
                }]
            },
            {
                name: "AdInfo",
                fields: [{
                    rule: "optional",
                    type: "int64",
                    name: "ad_id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "ad_zone_id",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "double",
                    name: "ad_relevancy",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "category",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "double",
                    name: "cpm",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "cpm_encrypt",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "sign",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_valid",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "CurrencyType.Type",
                    name: "currency_type",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "version",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "float",
                    name: "timestamp",
                    id: 11
                }]
            },
            {
                name: "TaskIDInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "ad_task_id",
                    id: 1
                }]
            },
            {
                name: "ShareInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "package_name",
                    id: 2
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Wechat",
                        id: 1
                    },
                    {
                        name: "Weibo",
                        id: 2
                    },
                    {
                        name: "Dudu",
                        id: 3
                    },
                    {
                        name: "QQ",
                        id: 4
                    },
                    {
                        name: "WechatSession",
                        id: 5
                    },
                    {
                        name: "WechatTimeline",
                        id: 6
                    },
                    {
                        name: "Evernote",
                        id: 7
                    },
                    {
                        name: "TencentQZone",
                        id: 8
                    },
                    {
                        name: "Pocket",
                        id: 9
                    },
                    {
                        name: "Momo",
                        id: 10
                    },
                    {
                        name: "Youdao",
                        id: 11
                    },
                    {
                        name: "Twitter",
                        id: 12
                    },
                    {
                        name: "ZhihuMessage",
                        id: 13
                    },
                    {
                        name: "Email",
                        id: 14
                    },
                    {
                        name: "Message",
                        id: 15
                    },
                    {
                        name: "CopyLink",
                        id: 16
                    },
                    {
                        name: "QQComputer",
                        id: 17
                    },
                    {
                        name: "QQCollect",
                        id: 18
                    },
                    {
                        name: "WechatCollect",
                        id: 19
                    },
                    {
                        name: "ZhihuHome",
                        id: 20
                    },
                    {
                        name: "More",
                        id: 21
                    }]
                }]
            },
            {
                name: "ExperimentFeature",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "value",
                    id: 2
                }]
            },
            {
                name: "ExperimentInfo",
                fields: [{
                    rule: "repeated",
                    type: "ExperimentFeature",
                    name: "feature",
                    id: 1
                },
                {
                    rule: "repeated",
                    type: "string",
                    name: "feature_name",
                    id: 2
                },
                {
                    rule: "repeated",
                    type: "string",
                    name: "feature_value",
                    id: 3
                }]
            },
            {
                name: "VerticalInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "Type",
                    name: "referrer_type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "referrer_host",
                    id: 3
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Home",
                        id: 1
                    },
                    {
                        name: "Topic",
                        id: 2
                    },
                    {
                        name: "Answer",
                        id: 3
                    },
                    {
                        name: "Question",
                        id: 4
                    },
                    {
                        name: "RoundTable",
                        id: 5
                    },
                    {
                        name: "Explore",
                        id: 6
                    },
                    {
                        name: "User",
                        id: 7
                    },
                    {
                        name: "Column",
                        id: 8
                    },
                    {
                        name: "Post",
                        id: 9
                    },
                    {
                        name: "Live",
                        id: 10
                    },
                    {
                        name: "Publication",
                        id: 11
                    },
                    {
                        name: "Message",
                        id: 12
                    },
                    {
                        name: "Collection",
                        id: 13
                    },
                    {
                        name: "Search",
                        id: 14
                    },
                    {
                        name: "Org",
                        id: 15
                    },
                    {
                        name: "Comment",
                        id: 16
                    },
                    {
                        name: "Guide",
                        id: 17
                    },
                    {
                        name: "Edit",
                        id: 18
                    },
                    {
                        name: "Setting",
                        id: 19
                    },
                    {
                        name: "Notification",
                        id: 20
                    },
                    {
                        name: "ImageViewer",
                        id: 21
                    },
                    {
                        name: "LinkClick",
                        id: 22
                    },
                    {
                        name: "Promotion",
                        id: 23
                    },
                    {
                        name: "AdLaunching",
                        id: 24
                    },
                    {
                        name: "EBook",
                        id: 25
                    },
                    {
                        name: "Other",
                        id: 26
                    },
                    {
                        name: "Remix",
                        id: 27
                    },
                    {
                        name: "Pin",
                        id: 28
                    },
                    {
                        name: "Wallet",
                        id: 29
                    }]
                }]
            },
            {
                name: "ReportInfo",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "id",
                    id: 1
                }]
            },
            {
                name: "Attribute",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "key",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "value",
                    id: 2
                }]
            },
            {
                name: "MonitorEventInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "type",
                    id: 1,
                    options: {
                        deprecated: !0
                    }
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "name",
                    id: 2
                },
                {
                    rule: "repeated",
                    type: "Attribute",
                    name: "attribute",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "EventType",
                    name: "event_type",
                    id: 4
                }],
                enums: [{
                    name: "EventType",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "LogicError",
                        id: 1
                    },
                    {
                        name: "RuntimeError",
                        id: 2
                    },
                    {
                        name: "SecurityError",
                        id: 3
                    }]
                }]
            },
            {
                name: "WebPerformanceInfo",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "navigation_start",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "unload_event_start",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "unload_event_end",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "redirect_start",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "redirect_end",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "fetch_start",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "domain_lookup_start",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "domain_lookup_end",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "connect_start",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "connect_end",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "secure_connection_start",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "request_start",
                    id: 12
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "response_start",
                    id: 13
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "response_end",
                    id: 14
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "dom_loading",
                    id: 15
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "dom_interactive",
                    id: 16
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "dom_content_loaded_event_start",
                    id: 17
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "dom_content_loaded_event_end",
                    id: 18
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "dom_complete",
                    id: 19
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "load_event_start",
                    id: 20
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "load_event_end",
                    id: 21
                }]
            },
            {
                name: "AppPerformanceInfo",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "render_start",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "render_complete",
                    id: 2
                }]
            },
            {
                name: "MonitorInfo",
                fields: [{
                    rule: "optional",
                    type: "RequestInfo",
                    name: "request",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "MonitorEventInfo",
                    name: "event",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "WebPerformanceInfo",
                    name: "web_performance",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "AppPerformanceInfo",
                    name: "app_performance",
                    id: 5
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Page",
                        id: 1
                    },
                    {
                        name: "Ajax",
                        id: 2
                    },
                    {
                        name: "Event",
                        id: 3
                    }]
                }]
            },
            {
                name: "UTMInfo",
                fields: [{
                    rule: "optional",
                    type: "string",
                    name: "medium",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "source",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "campaign",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "content",
                    id: 4
                },
                {
                    rule: "repeated",
                    type: "string",
                    name: "term",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "division",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "raw_term",
                    id: 7
                }]
            },
            {
                name: "ReadInfo",
                fields: [{
                    rule: "optional",
                    type: "int32",
                    name: "total_pages",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "current_pages",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "duration",
                    id: 5
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "EBook",
                        id: 1
                    }]
                }]
            },
            {
                name: "FeedAttachedInfo",
                fields: [{
                    rule: "optional",
                    type: "int64",
                    name: "request_id",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ContentType.Type",
                    name: "content_type",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "content_id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "publish_timestamp",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "voteup_num",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "comment_num",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "follower_num",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "feed_index",
                    id: 8
                },
                {
                    rule: "repeated",
                    type: "SourceInfo",
                    name: "sources",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "feed_type",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "parent_id",
                    id: 11
                }],
                messages: [{
                    name: "SourceInfo",
                    fields: [{
                        rule: "optional",
                        type: "string",
                        name: "source_type",
                        id: 1
                    },
                    {
                        rule: "optional",
                        type: "string",
                        name: "source_id",
                        id: 2
                    },
                    {
                        rule: "optional",
                        type: "int64",
                        name: "action_timestamp",
                        id: 3
                    },
                    {
                        rule: "optional",
                        type: "bool",
                        name: "is_followed",
                        id: 4
                    },
                    {
                        rule: "optional",
                        type: "InterestType",
                        name: "interest_type",
                        id: 5
                    }],
                    enums: [{
                        name: "InterestType",
                        values: [{
                            name: "Unknown",
                            id: 0
                        },
                        {
                            name: "Explore",
                            id: 1
                        },
                        {
                            name: "Exploit",
                            id: 2
                        }]
                    }]
                }]
            },
            {
                name: "AttachedInfo",
                fields: [{
                    rule: "optional",
                    type: "FeedAttachedInfo",
                    name: "feed_attached_info",
                    id: 1
                }]
            },
            {
                name: "MessageInfo",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "Unknown",
                        id: 0
                    },
                    {
                        name: "Text",
                        id: 1
                    },
                    {
                        name: "Audio",
                        id: 2
                    },
                    {
                        name: "Image",
                        id: 3
                    },
                    {
                        name: "File",
                        id: 4
                    }]
                }]
            },
            {
                name: "ZaTaskType",
                fields: [],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "UNKNOWN",
                        id: 1
                    },
                    {
                        name: "SEARCH",
                        id: 2
                    }]
                }]
            },
            {
                name: "ZaTask",
                fields: [{
                    rule: "optional",
                    type: "ZaTaskType.Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "repeated",
                    type: "ZaLogEntry",
                    name: "log",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "IDInfo",
                    name: "id",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "ClientInfo",
                    name: "client",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "start_timestamp",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "end_timestamp",
                    id: 6
                }]
            },
            {
                name: "ZaSessionEntry",
                fields: [{
                    rule: "optional",
                    type: "Type",
                    name: "type",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "ZaLogEntry",
                    name: "log",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "ZaTask",
                    name: "task",
                    id: 3
                }],
                enums: [{
                    name: "Type",
                    values: [{
                        name: "EVENT",
                        id: 1
                    },
                    {
                        name: "PAGE_SHOW",
                        id: 2
                    },
                    {
                        name: "CARD_SHOW",
                        id: 3
                    },
                    {
                        name: "TASK",
                        id: 4
                    }]
                }]
            },
            {
                name: "ZaSession",
                fields: [{
                    rule: "repeated",
                    type: "ZaSessionEntry",
                    name: "entry",
                    id: 1
                },
                {
                    rule: "optional",
                    type: "IDInfo",
                    name: "id",
                    id: 2
                },
                {
                    rule: "optional",
                    type: "ClientInfo",
                    name: "client",
                    id: 3
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "start_timestamp",
                    id: 4
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "end_timestamp",
                    id: 5
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "landing_url",
                    id: 6
                },
                {
                    rule: "optional",
                    type: "string",
                    name: "exit_url",
                    id: 7
                },
                {
                    rule: "optional",
                    type: "int32",
                    name: "url_num",
                    id: 8
                },
                {
                    rule: "optional",
                    type: "int64",
                    name: "duration",
                    id: 9
                },
                {
                    rule: "optional",
                    type: "UTMInfo",
                    name: "utm",
                    id: 10
                },
                {
                    rule: "optional",
                    type: "bool",
                    name: "is_bounce",
                    id: 11
                },
                {
                    rule: "optional",
                    type: "BaseInfo",
                    name: "base",
                    id: 12
                }]
            }]
        }
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            if (! (this instanceof i)) return new i(e);
            this.options = l.assign({
                level: v,
                method: w,
                chunkSize: 16384,
                windowBits: 15,
                memLevel: 8,
                strategy: _,
                to: ""
            },
            e || {});
            var t = this.options;
            t.raw && t.windowBits > 0 ? t.windowBits = -t.windowBits: t.gzip && t.windowBits > 0 && t.windowBits < 16 && (t.windowBits += 16),
            this.err = 0,
            this.msg = "",
            this.ended = !1,
            this.chunks = [],
            this.strm = new d,
            this.strm.avail_out = 0;
            var n = s.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy);
            if (n !== m) throw new Error(f[n]);
            if (t.header && s.deflateSetHeader(this.strm, t.header), t.dictionary) {
                var r;
                if (r = "string" == typeof t.dictionary ? u.string2buf(t.dictionary) : "[object ArrayBuffer]" === h.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, n = s.deflateSetDictionary(this.strm, r), n !== m) throw new Error(f[n]);
                this._dict_set = !0
            }
        }
        function r(e, t) {
            var n = new i(t);
            if (n.push(e, !0), n.err) throw n.msg || f[n.err];
            return n.result
        }
        function a(e, t) {
            return t = t || {},
            t.raw = !0,
            r(e, t)
        }
        function o(e, t) {
            return t = t || {},
            t.gzip = !0,
            r(e, t)
        }
        var s = n(112),
        l = n(14),
        u = n(109),
        f = n(45),
        d = n(114),
        h = Object.prototype.toString,
        p = 0,
        c = 4,
        m = 0,
        y = 1,
        g = 2,
        v = -1,
        _ = 0,
        w = 8;
        i.prototype.push = function(e, t) {
            var n, i, r = this.strm,
            a = this.options.chunkSize;
            if (this.ended) return ! 1;
            i = t === ~~t ? t: t === !0 ? c: p,
            "string" == typeof e ? r.input = u.string2buf(e) : "[object ArrayBuffer]" === h.call(e) ? r.input = new Uint8Array(e) : r.input = e,
            r.next_in = 0,
            r.avail_in = r.input.length;
            do {
                if (0 === r.avail_out && (r.output = new l.Buf8(a), r.next_out = 0, r.avail_out = a), n = s.deflate(r, i), n !== y && n !== m) return this.onEnd(n), this.ended = !0, !1;
                0 !== r.avail_out && (0 !== r.avail_in || i !== c && i !== g) || ("string" === this.options.to ? this.onData(u.buf2binstring(l.shrinkBuf(r.output, r.next_out))) : this.onData(l.shrinkBuf(r.output, r.next_out)))
            } while (( r . avail_in > 0 || 0 === r . avail_out ) && n !== y);
            return i === c ? (n = s.deflateEnd(this.strm), this.onEnd(n), this.ended = !0, n === m) : i !== g || (this.onEnd(m), r.avail_out = 0, !0)
        },
        i.prototype.onData = function(e) {
            this.chunks.push(e)
        },
        i.prototype.onEnd = function(e) {
            e === m && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = l.flattenChunks(this.chunks)),
            this.chunks = [],
            this.err = e,
            this.msg = this.strm.msg
        },
        t.Deflate = i,
        t.deflate = r,
        t.deflateRaw = a,
        t.gzip = o
    },
    function(e, t, n) {
        "use strict";
        function i(e, t) {
            if (t < 65537 && (e.subarray && o || !e.subarray && a)) return String.fromCharCode.apply(null, r.shrinkBuf(e, t));
            for (var n = "",
            i = 0; i < t; i++) n += String.fromCharCode(e[i]);
            return n
        }
        var r = n(14),
        a = !0,
        o = !0;
        try {
            String.fromCharCode.apply(null, [0])
        } catch(e) {
            a = !1
        }
        try {
            String.fromCharCode.apply(null, new Uint8Array(1))
        } catch(e) {
            o = !1
        }
        for (var s = new r.Buf8(256), l = 0; l < 256; l++) s[l] = l >= 252 ? 6 : l >= 248 ? 5 : l >= 240 ? 4 : l >= 224 ? 3 : l >= 192 ? 2 : 1;
        s[254] = s[254] = 1,
        t.string2buf = function(e) {
            var t, n, i, a, o, s = e.length,
            l = 0;
            for (a = 0; a < s; a++) n = e.charCodeAt(a),
            55296 === (64512 & n) && a + 1 < s && (i = e.charCodeAt(a + 1), 56320 === (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), a++)),
            l += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4;
            for (t = new r.Buf8(l), o = 0, a = 0; o < l; a++) n = e.charCodeAt(a),
            55296 === (64512 & n) && a + 1 < s && (i = e.charCodeAt(a + 1), 56320 === (64512 & i) && (n = 65536 + (n - 55296 << 10) + (i - 56320), a++)),
            n < 128 ? t[o++] = n: n < 2048 ? (t[o++] = 192 | n >>> 6, t[o++] = 128 | 63 & n) : n < 65536 ? (t[o++] = 224 | n >>> 12, t[o++] = 128 | n >>> 6 & 63, t[o++] = 128 | 63 & n) : (t[o++] = 240 | n >>> 18, t[o++] = 128 | n >>> 12 & 63, t[o++] = 128 | n >>> 6 & 63, t[o++] = 128 | 63 & n);
            return t
        },
        t.buf2binstring = function(e) {
            return i(e, e.length)
        },
        t.binstring2buf = function(e) {
            for (var t = new r.Buf8(e.length), n = 0, i = t.length; n < i; n++) t[n] = e.charCodeAt(n);
            return t
        },
        t.buf2string = function(e, t) {
            var n, r, a, o, l = t || e.length,
            u = new Array(2 * l);
            for (r = 0, n = 0; n < l;) if (a = e[n++], a < 128) u[r++] = a;
            else if (o = s[a], o > 4) u[r++] = 65533,
            n += o - 1;
            else {
                for (a &= 2 === o ? 31 : 3 === o ? 15 : 7; o > 1 && n < l;) a = a << 6 | 63 & e[n++],
                o--;
                o > 1 ? u[r++] = 65533 : a < 65536 ? u[r++] = a: (a -= 65536, u[r++] = 55296 | a >> 10 & 1023, u[r++] = 56320 | 1023 & a)
            }
            return i(u, r)
        },
        t.utf8border = function(e, t) {
            var n;
            for (t = t || e.length, t > e.length && (t = e.length), n = t - 1; n >= 0 && 128 === (192 & e[n]);) n--;
            return n < 0 ? t: 0 === n ? t: n + s[e[n]] > t ? n: t
        }
    },
    function(e, t) {
        "use strict";
        function n(e, t, n, i) {
            for (var r = 65535 & e | 0,
            a = e >>> 16 & 65535 | 0,
            o = 0; 0 !== n;) {
                o = n > 2e3 ? 2e3: n,
                n -= o;
                do r = r + t[i++] | 0,
                a = a + r | 0;
                while (--o);
                r %= 65521,
                a %= 65521
            }
            return r | a << 16 | 0
        }
        e.exports = n
    },
    function(e, t) {
        "use strict";
        function n() {
            for (var e, t = [], n = 0; n < 256; n++) {
                e = n;
                for (var i = 0; i < 8; i++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1;
                t[n] = e
            }
            return t
        }
        function i(e, t, n, i) {
            var a = r,
            o = i + n;
            e ^= -1;
            for (var s = i; s < o; s++) e = e >>> 8 ^ a[255 & (e ^ t[s])];
            return e ^ -1
        }
        var r = n();
        e.exports = i
    },
    function(e, t, n) {
        "use strict";
        function i(e, t) {
            return e.msg = O[t],
            t
        }
        function r(e) {
            return (e << 1) - (e > 4 ? 9 : 0)
        }
        function a(e) {
            for (var t = e.length; --t >= 0;) e[t] = 0
        }
        function o(e) {
            var t = e.state,
            n = t.pending;
            n > e.avail_out && (n = e.avail_out),
            0 !== n && (L.arraySet(e.output, t.pending_buf, t.pending_out, n, e.next_out), e.next_out += n, t.pending_out += n, e.total_out += n, e.avail_out -= n, t.pending -= n, 0 === t.pending && (t.pending_out = 0))
        }
        function s(e, t) {
            R._tr_flush_block(e, e.block_start >= 0 ? e.block_start: -1, e.strstart - e.block_start, t),
            e.block_start = e.strstart,
            o(e.strm)
        }
        function l(e, t) {
            e.pending_buf[e.pending++] = t
        }
        function u(e, t) {
            e.pending_buf[e.pending++] = t >>> 8 & 255,
            e.pending_buf[e.pending++] = 255 & t
        }
        function f(e, t, n, i) {
            var r = e.avail_in;
            return r > i && (r = i),
            0 === r ? 0 : (e.avail_in -= r, L.arraySet(t, e.input, e.next_in, r, n), 1 === e.state.wrap ? e.adler = C(e.adler, t, r, n) : 2 === e.state.wrap && (e.adler = U(e.adler, t, r, n)), e.next_in += r, e.total_in += r, r)
        }
        function d(e, t) {
            var n, i, r = e.max_chain_length,
            a = e.strstart,
            o = e.prev_length,
            s = e.nice_match,
            l = e.strstart > e.w_size - de ? e.strstart - (e.w_size - de) : 0,
            u = e.window,
            f = e.w_mask,
            d = e.prev,
            h = e.strstart + fe,
            p = u[a + o - 1],
            c = u[a + o];
            e.prev_length >= e.good_match && (r >>= 2),
            s > e.lookahead && (s = e.lookahead);
            do
            if (n = t, u[n + o] === c && u[n + o - 1] === p && u[n] === u[a] && u[++n] === u[a + 1]) {
                a += 2,
                n++;
                do;
                while (u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && u[++a] === u[++n] && a < h);
                if (i = fe - (h - a), a = h - fe, i > o) {
                    if (e.match_start = t, o = i, i >= s) break;
                    p = u[a + o - 1],
                    c = u[a + o]
                }
            }
            while ((t = d[t & f]) > l && 0 !== --r);
            return o <= e.lookahead ? o: e.lookahead
        }
        function h(e) {
            var t, n, i, r, a, o = e.w_size;
            do {
                if (r = e.window_size - e.lookahead - e.strstart, e.strstart >= o + (o - de)) {
                    L.arraySet(e.window, e.window, o, o, 0),
                    e.match_start -= o,
                    e.strstart -= o,
                    e.block_start -= o,
                    n = e.hash_size,
                    t = n;
                    do i = e.head[--t],
                    e.head[t] = i >= o ? i - o: 0;
                    while (--n);
                    n = o,
                    t = n;
                    do i = e.prev[--t],
                    e.prev[t] = i >= o ? i - o: 0;
                    while (--n);
                    r += o
                }
                if (0 === e.strm.avail_in) break;
                if (n = f(e.strm, e.window, e.strstart + e.lookahead, r), e.lookahead += n, e.lookahead + e.insert >= ue) for (a = e.strstart - e.insert, e.ins_h = e.window[a], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[a + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[a + ue - 1]) & e.hash_mask, e.prev[a & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = a, a++, e.insert--, !(e.lookahead + e.insert < ue)););
            } while ( e . lookahead < de && 0 !== e . strm . avail_in )
        }
        function p(e, t) {
            var n = 65535;
            for (n > e.pending_buf_size - 5 && (n = e.pending_buf_size - 5);;) {
                if (e.lookahead <= 1) {
                    if (h(e), 0 === e.lookahead && t === B) return we;
                    if (0 === e.lookahead) break
                }
                e.strstart += e.lookahead,
                e.lookahead = 0;
                var i = e.block_start + n;
                if ((0 === e.strstart || e.strstart >= i) && (e.lookahead = e.strstart - i, e.strstart = i, s(e, !1), 0 === e.strm.avail_out)) return we;
                if (e.strstart - e.block_start >= e.w_size - de && (s(e, !1), 0 === e.strm.avail_out)) return we
            }
            return e.insert = 0,
            t === z ? (s(e, !0), 0 === e.strm.avail_out ? Ee: Te) : e.strstart > e.block_start && (s(e, !1), 0 === e.strm.avail_out) ? we: we
        }
        function c(e, t) {
            for (var n, i;;) {
                if (e.lookahead < de) {
                    if (h(e), e.lookahead < de && t === B) return we;
                    if (0 === e.lookahead) break
                }
                if (n = 0, e.lookahead >= ue && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + ue - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== n && e.strstart - n <= e.w_size - de && (e.match_length = d(e, n)), e.match_length >= ue) if (i = R._tr_tally(e, e.strstart - e.match_start, e.match_length - ue), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= ue) {
                    e.match_length--;
                    do e.strstart++,
                    e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + ue - 1]) & e.hash_mask,
                    n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h],
                    e.head[e.ins_h] = e.strstart;
                    while (0 !== --e.match_length);
                    e.strstart++
                } else e.strstart += e.match_length,
                e.match_length = 0,
                e.ins_h = e.window[e.strstart],
                e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask;
                else i = R._tr_tally(e, 0, e.window[e.strstart]),
                e.lookahead--,
                e.strstart++;
                if (i && (s(e, !1), 0 === e.strm.avail_out)) return we
            }
            return e.insert = e.strstart < ue - 1 ? e.strstart: ue - 1,
            t === z ? (s(e, !0), 0 === e.strm.avail_out ? Ee: Te) : e.last_lit && (s(e, !1), 0 === e.strm.avail_out) ? we: be
        }
        function m(e, t) {
            for (var n, i, r;;) {
                if (e.lookahead < de) {
                    if (h(e), e.lookahead < de && t === B) return we;
                    if (0 === e.lookahead) break
                }
                if (n = 0, e.lookahead >= ue && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + ue - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = ue - 1, 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - de && (e.match_length = d(e, n), e.match_length <= 5 && (e.strategy === q || e.match_length === ue && e.strstart - e.match_start > 4096) && (e.match_length = ue - 1)), e.prev_length >= ue && e.match_length <= e.prev_length) {
                    r = e.strstart + e.lookahead - ue,
                    i = R._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - ue),
                    e.lookahead -= e.prev_length - 1,
                    e.prev_length -= 2;
                    do++e.strstart <= r && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + ue - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart);
                    while (0 !== --e.prev_length);
                    if (e.match_available = 0, e.match_length = ue - 1, e.strstart++, i && (s(e, !1), 0 === e.strm.avail_out)) return we
                } else if (e.match_available) {
                    if (i = R._tr_tally(e, 0, e.window[e.strstart - 1]), i && s(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return we
                } else e.match_available = 1,
                e.strstart++,
                e.lookahead--
            }
            return e.match_available && (i = R._tr_tally(e, 0, e.window[e.strstart - 1]), e.match_available = 0),
            e.insert = e.strstart < ue - 1 ? e.strstart: ue - 1,
            t === z ? (s(e, !0), 0 === e.strm.avail_out ? Ee: Te) : e.last_lit && (s(e, !1), 0 === e.strm.avail_out) ? we: be
        }
        function y(e, t) {
            for (var n, i, r, a, o = e.window;;) {
                if (e.lookahead <= fe) {
                    if (h(e), e.lookahead <= fe && t === B) return we;
                    if (0 === e.lookahead) break
                }
                if (e.match_length = 0, e.lookahead >= ue && e.strstart > 0 && (r = e.strstart - 1, i = o[r], i === o[++r] && i === o[++r] && i === o[++r])) {
                    a = e.strstart + fe;
                    do;
                    while (i === o[++r] && i === o[++r] && i === o[++r] && i === o[++r] && i === o[++r] && i === o[++r] && i === o[++r] && i === o[++r] && r < a);
                    e.match_length = fe - (a - r),
                    e.match_length > e.lookahead && (e.match_length = e.lookahead)
                }
                if (e.match_length >= ue ? (n = R._tr_tally(e, 1, e.match_length - ue), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (n = R._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), n && (s(e, !1), 0 === e.strm.avail_out)) return we
            }
            return e.insert = 0,
            t === z ? (s(e, !0), 0 === e.strm.avail_out ? Ee: Te) : e.last_lit && (s(e, !1), 0 === e.strm.avail_out) ? we: be
        }
        function g(e, t) {
            for (var n;;) {
                if (0 === e.lookahead && (h(e), 0 === e.lookahead)) {
                    if (t === B) return we;
                    break
                }
                if (e.match_length = 0, n = R._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, n && (s(e, !1), 0 === e.strm.avail_out)) return we
            }
            return e.insert = 0,
            t === z ? (s(e, !0), 0 === e.strm.avail_out ? Ee: Te) : e.last_lit && (s(e, !1), 0 === e.strm.avail_out) ? we: be
        }
        function v(e, t, n, i, r) {
            this.good_length = e,
            this.max_lazy = t,
            this.nice_length = n,
            this.max_chain = i,
            this.func = r
        }
        function _(e) {
            e.window_size = 2 * e.w_size,
            a(e.head),
            e.max_lazy_match = x[e.level].max_lazy,
            e.good_match = x[e.level].good_length,
            e.nice_match = x[e.level].nice_length,
            e.max_chain_length = x[e.level].max_chain,
            e.strstart = 0,
            e.block_start = 0,
            e.lookahead = 0,
            e.insert = 0,
            e.match_length = e.prev_length = ue - 1,
            e.match_available = 0,
            e.ins_h = 0
        }
        function w() {
            this.strm = null,
            this.status = 0,
            this.pending_buf = null,
            this.pending_buf_size = 0,
            this.pending_out = 0,
            this.pending = 0,
            this.wrap = 0,
            this.gzhead = null,
            this.gzindex = 0,
            this.method = Q,
            this.last_flush = -1,
            this.w_size = 0,
            this.w_bits = 0,
            this.w_mask = 0,
            this.window = null,
            this.window_size = 0,
            this.prev = null,
            this.head = null,
            this.ins_h = 0,
            this.hash_size = 0,
            this.hash_bits = 0,
            this.hash_mask = 0,
            this.hash_shift = 0,
            this.block_start = 0,
            this.match_length = 0,
            this.prev_match = 0,
            this.match_available = 0,
            this.strstart = 0,
            this.match_start = 0,
            this.lookahead = 0,
            this.prev_length = 0,
            this.max_chain_length = 0,
            this.max_lazy_match = 0,
            this.level = 0,
            this.strategy = 0,
            this.good_match = 0,
            this.nice_match = 0,
            this.dyn_ltree = new L.Buf16(2 * se),
            this.dyn_dtree = new L.Buf16(2 * (2 * ae + 1)),
            this.bl_tree = new L.Buf16(2 * (2 * oe + 1)),
            a(this.dyn_ltree),
            a(this.dyn_dtree),
            a(this.bl_tree),
            this.l_desc = null,
            this.d_desc = null,
            this.bl_desc = null,
            this.bl_count = new L.Buf16(le + 1),
            this.heap = new L.Buf16(2 * re + 1),
            a(this.heap),
            this.heap_len = 0,
            this.heap_max = 0,
            this.depth = new L.Buf16(2 * re + 1),
            a(this.depth),
            this.l_buf = 0,
            this.lit_bufsize = 0,
            this.last_lit = 0,
            this.d_buf = 0,
            this.opt_len = 0,
            this.static_len = 0,
            this.matches = 0,
            this.insert = 0,
            this.bi_buf = 0,
            this.bi_valid = 0
        }
        function b(e) {
            var t;
            return e && e.state ? (e.total_in = e.total_out = 0, e.data_type = J, t = e.state, t.pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = t.wrap ? pe: ve, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = B, R._tr_init(t), Y) : i(e, j)
        }
        function E(e) {
            var t = b(e);
            return t === Y && _(e.state),
            t
        }
        function T(e, t) {
            return e && e.state ? 2 !== e.state.wrap ? j: (e.state.gzhead = t, Y) : j
        }
        function S(e, t, n, r, a, o) {
            if (!e) return j;
            var s = 1;
            if (t === W && (t = 6), r < 0 ? (s = 0, r = -r) : r > 15 && (s = 2, r -= 16), a < 1 || a > K || n !== Q || r < 8 || r > 15 || t < 0 || t > 9 || o < 0 || o > G) return i(e, j);
            8 === r && (r = 9);
            var l = new w;
            return e.state = l,
            l.strm = e,
            l.wrap = s,
            l.gzhead = null,
            l.w_bits = r,
            l.w_size = 1 << l.w_bits,
            l.w_mask = l.w_size - 1,
            l.hash_bits = a + 7,
            l.hash_size = 1 << l.hash_bits,
            l.hash_mask = l.hash_size - 1,
            l.hash_shift = ~~ ((l.hash_bits + ue - 1) / ue),
            l.window = new L.Buf8(2 * l.w_size),
            l.head = new L.Buf16(l.hash_size),
            l.prev = new L.Buf16(l.w_size),
            l.lit_bufsize = 1 << a + 6,
            l.pending_buf_size = 4 * l.lit_bufsize,
            l.pending_buf = new L.Buf8(l.pending_buf_size),
            l.d_buf = 1 * l.lit_bufsize,
            l.l_buf = 3 * l.lit_bufsize,
            l.level = t,
            l.strategy = o,
            l.method = n,
            E(e)
        }
        function I(e, t) {
            return S(e, t, Q, ee, te, X)
        }
        function k(e, t) {
            var n, s, f, d;
            if (!e || !e.state || t > V || t < 0) return e ? i(e, j) : j;
            if (s = e.state, !e.output || !e.input && 0 !== e.avail_in || s.status === _e && t !== z) return i(e, 0 === e.avail_out ? Z: j);
            if (s.strm = e, n = s.last_flush, s.last_flush = t, s.status === pe) if (2 === s.wrap) e.adler = 0,
            l(s, 31),
            l(s, 139),
            l(s, 8),
            s.gzhead ? (l(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (s.gzhead.extra ? 4 : 0) + (s.gzhead.name ? 8 : 0) + (s.gzhead.comment ? 16 : 0)), l(s, 255 & s.gzhead.time), l(s, s.gzhead.time >> 8 & 255), l(s, s.gzhead.time >> 16 & 255), l(s, s.gzhead.time >> 24 & 255), l(s, 9 === s.level ? 2 : s.strategy >= H || s.level < 2 ? 4 : 0), l(s, 255 & s.gzhead.os), s.gzhead.extra && s.gzhead.extra.length && (l(s, 255 & s.gzhead.extra.length), l(s, s.gzhead.extra.length >> 8 & 255)), s.gzhead.hcrc && (e.adler = U(e.adler, s.pending_buf, s.pending, 0)), s.gzindex = 0, s.status = ce) : (l(s, 0), l(s, 0), l(s, 0), l(s, 0), l(s, 0), l(s, 9 === s.level ? 2 : s.strategy >= H || s.level < 2 ? 4 : 0), l(s, Se), s.status = ve);
            else {
                var h = Q + (s.w_bits - 8 << 4) << 8,
                p = -1;
                p = s.strategy >= H || s.level < 2 ? 0 : s.level < 6 ? 1 : 6 === s.level ? 2 : 3,
                h |= p << 6,
                0 !== s.strstart && (h |= he),
                h += 31 - h % 31,
                s.status = ve,
                u(s, h),
                0 !== s.strstart && (u(s, e.adler >>> 16), u(s, 65535 & e.adler)),
                e.adler = 1
            }
            if (s.status === ce) if (s.gzhead.extra) {
                for (f = s.pending; s.gzindex < (65535 & s.gzhead.extra.length) && (s.pending !== s.pending_buf_size || (s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)), o(e), f = s.pending, s.pending !== s.pending_buf_size));) l(s, 255 & s.gzhead.extra[s.gzindex]),
                s.gzindex++;
                s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)),
                s.gzindex === s.gzhead.extra.length && (s.gzindex = 0, s.status = me)
            } else s.status = me;
            if (s.status === me) if (s.gzhead.name) {
                f = s.pending;
                do {
                    if (s.pending === s.pending_buf_size && (s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)), o(e), f = s.pending, s.pending === s.pending_buf_size)) {
                        d = 1;
                        break
                    }
                    d = s.gzindex < s.gzhead.name.length ? 255 & s.gzhead.name.charCodeAt(s.gzindex++) : 0, l(s, d)
                } while ( 0 !== d );
                s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)),
                0 === d && (s.gzindex = 0, s.status = ye)
            } else s.status = ye;
            if (s.status === ye) if (s.gzhead.comment) {
                f = s.pending;
                do {
                    if (s.pending === s.pending_buf_size && (s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)), o(e), f = s.pending, s.pending === s.pending_buf_size)) {
                        d = 1;
                        break
                    }
                    d = s.gzindex < s.gzhead.comment.length ? 255 & s.gzhead.comment.charCodeAt(s.gzindex++) : 0, l(s, d)
                } while ( 0 !== d );
                s.gzhead.hcrc && s.pending > f && (e.adler = U(e.adler, s.pending_buf, s.pending - f, f)),
                0 === d && (s.status = ge)
            } else s.status = ge;
            if (s.status === ge && (s.gzhead.hcrc ? (s.pending + 2 > s.pending_buf_size && o(e), s.pending + 2 <= s.pending_buf_size && (l(s, 255 & e.adler), l(s, e.adler >> 8 & 255), e.adler = 0, s.status = ve)) : s.status = ve), 0 !== s.pending) {
                if (o(e), 0 === e.avail_out) return s.last_flush = -1,
                Y
            } else if (0 === e.avail_in && r(t) <= r(n) && t !== z) return i(e, Z);
            if (s.status === _e && 0 !== e.avail_in) return i(e, Z);
            if (0 !== e.avail_in || 0 !== s.lookahead || t !== B && s.status !== _e) {
                var c = s.strategy === H ? g(s, t) : s.strategy === $ ? y(s, t) : x[s.level].func(s, t);
                if (c !== Ee && c !== Te || (s.status = _e), c === we || c === Ee) return 0 === e.avail_out && (s.last_flush = -1),
                Y;
                if (c === be && (t === M ? R._tr_align(s) : t !== V && (R._tr_stored_block(s, 0, 0, !1), t === N && (a(s.head), 0 === s.lookahead && (s.strstart = 0, s.block_start = 0, s.insert = 0))), o(e), 0 === e.avail_out)) return s.last_flush = -1,
                Y
            }
            return t !== z ? Y: s.wrap <= 0 ? F: (2 === s.wrap ? (l(s, 255 & e.adler), l(s, e.adler >> 8 & 255), l(s, e.adler >> 16 & 255), l(s, e.adler >> 24 & 255), l(s, 255 & e.total_in), l(s, e.total_in >> 8 & 255), l(s, e.total_in >> 16 & 255), l(s, e.total_in >> 24 & 255)) : (u(s, e.adler >>> 16), u(s, 65535 & e.adler)), o(e), s.wrap > 0 && (s.wrap = -s.wrap), 0 !== s.pending ? Y: F)
        }
        function A(e) {
            var t;
            return e && e.state ? (t = e.state.status, t !== pe && t !== ce && t !== me && t !== ye && t !== ge && t !== ve && t !== _e ? i(e, j) : (e.state = null, t === ve ? i(e, D) : Y)) : j
        }
        function P(e, t) {
            var n, i, r, o, s, l, u, f, d = t.length;
            if (!e || !e.state) return j;
            if (n = e.state, o = n.wrap, 2 === o || 1 === o && n.status !== pe || n.lookahead) return j;
            for (1 === o && (e.adler = C(e.adler, t, d, 0)), n.wrap = 0, d >= n.w_size && (0 === o && (a(n.head), n.strstart = 0, n.block_start = 0, n.insert = 0), f = new L.Buf8(n.w_size), L.arraySet(f, t, d - n.w_size, n.w_size, 0), t = f, d = n.w_size), s = e.avail_in, l = e.next_in, u = e.input, e.avail_in = d, e.next_in = 0, e.input = t, h(n); n.lookahead >= ue;) {
                i = n.strstart,
                r = n.lookahead - (ue - 1);
                do n.ins_h = (n.ins_h << n.hash_shift ^ n.window[i + ue - 1]) & n.hash_mask,
                n.prev[i & n.w_mask] = n.head[n.ins_h],
                n.head[n.ins_h] = i,
                i++;
                while (--r);
                n.strstart = i,
                n.lookahead = ue - 1,
                h(n)
            }
            return n.strstart += n.lookahead,
            n.block_start = n.strstart,
            n.insert = n.lookahead,
            n.lookahead = 0,
            n.match_length = n.prev_length = ue - 1,
            n.match_available = 0,
            e.next_in = l,
            e.input = u,
            e.avail_in = s,
            n.wrap = o,
            Y
        }
        var x, L = n(14),
        R = n(113),
        C = n(110),
        U = n(111),
        O = n(45),
        B = 0,
        M = 1,
        N = 3,
        z = 4,
        V = 5,
        Y = 0,
        F = 1,
        j = -2,
        D = -3,
        Z = -5,
        W = -1,
        q = 1,
        H = 2,
        $ = 3,
        G = 4,
        X = 0,
        J = 2,
        Q = 8,
        K = 9,
        ee = 15,
        te = 8,
        ne = 29,
        ie = 256,
        re = ie + 1 + ne,
        ae = 30,
        oe = 19,
        se = 2 * re + 1,
        le = 15,
        ue = 3,
        fe = 258,
        de = fe + ue + 1,
        he = 32,
        pe = 42,
        ce = 69,
        me = 73,
        ye = 91,
        ge = 103,
        ve = 113,
        _e = 666,
        we = 1,
        be = 2,
        Ee = 3,
        Te = 4,
        Se = 3;
        x = [new v(0, 0, 0, 0, p), new v(4, 4, 8, 4, c), new v(4, 5, 16, 8, c), new v(4, 6, 32, 32, c), new v(4, 4, 16, 16, m), new v(8, 16, 32, 32, m), new v(8, 16, 128, 128, m), new v(8, 32, 128, 256, m), new v(32, 128, 258, 1024, m), new v(32, 258, 258, 4096, m)],
        t.deflateInit = I,
        t.deflateInit2 = S,
        t.deflateReset = E,
        t.deflateResetKeep = b,
        t.deflateSetHeader = T,
        t.deflate = k,
        t.deflateEnd = A,
        t.deflateSetDictionary = P,
        t.deflateInfo = "pako deflate (from Nodeca project)"
    },
    function(e, t, n) {
        "use strict";
        function i(e) {
            for (var t = e.length; --t >= 0;) e[t] = 0
        }
        function r(e, t, n, i, r) {
            this.static_tree = e,
            this.extra_bits = t,
            this.extra_base = n,
            this.elems = i,
            this.max_length = r,
            this.has_stree = e && e.length
        }
        function a(e, t) {
            this.dyn_tree = e,
            this.max_code = 0,
            this.stat_desc = t
        }
        function o(e) {
            return e < 256 ? le[e] : le[256 + (e >>> 7)]
        }
        function s(e, t) {
            e.pending_buf[e.pending++] = 255 & t,
            e.pending_buf[e.pending++] = t >>> 8 & 255
        }
        function l(e, t, n) {
            e.bi_valid > G - n ? (e.bi_buf |= t << e.bi_valid & 65535, s(e, e.bi_buf), e.bi_buf = t >> G - e.bi_valid, e.bi_valid += n - G) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += n)
        }
        function u(e, t, n) {
            l(e, n[2 * t], n[2 * t + 1])
        }
        function f(e, t) {
            var n = 0;
            do n |= 1 & e,
            e >>>= 1,
            n <<= 1;
            while (--t > 0);
            return n >>> 1
        }
        function d(e) {
            16 === e.bi_valid ? (s(e, e.bi_buf), e.bi_buf = 0, e.bi_valid = 0) : e.bi_valid >= 8 && (e.pending_buf[e.pending++] = 255 & e.bi_buf, e.bi_buf >>= 8, e.bi_valid -= 8)
        }
        function h(e, t) {
            var n, i, r, a, o, s, l = t.dyn_tree,
            u = t.max_code,
            f = t.stat_desc.static_tree,
            d = t.stat_desc.has_stree,
            h = t.stat_desc.extra_bits,
            p = t.stat_desc.extra_base,
            c = t.stat_desc.max_length,
            m = 0;
            for (a = 0; a <= $; a++) e.bl_count[a] = 0;
            for (l[2 * e.heap[e.heap_max] + 1] = 0, n = e.heap_max + 1; n < H; n++) i = e.heap[n],
            a = l[2 * l[2 * i + 1] + 1] + 1,
            a > c && (a = c, m++),
            l[2 * i + 1] = a,
            i > u || (e.bl_count[a]++, o = 0, i >= p && (o = h[i - p]), s = l[2 * i], e.opt_len += s * (a + o), d && (e.static_len += s * (f[2 * i + 1] + o)));
            if (0 !== m) {
                do {
                    for (a = c - 1; 0 === e.bl_count[a];) a--;
                    e.bl_count[a]--, e.bl_count[a + 1] += 2, e.bl_count[c]--, m -= 2
                } while ( m > 0 );
                for (a = c; 0 !== a; a--) for (i = e.bl_count[a]; 0 !== i;) r = e.heap[--n],
                r > u || (l[2 * r + 1] !== a && (e.opt_len += (a - l[2 * r + 1]) * l[2 * r], l[2 * r + 1] = a), i--)
            }
        }
        function p(e, t, n) {
            var i, r, a = new Array($ + 1),
            o = 0;
            for (i = 1; i <= $; i++) a[i] = o = o + n[i - 1] << 1;
            for (r = 0; r <= t; r++) {
                var s = e[2 * r + 1];
                0 !== s && (e[2 * r] = f(a[s]++, s))
            }
        }
        function c() {
            var e, t, n, i, a, o = new Array($ + 1);
            for (n = 0, i = 0; i < j - 1; i++) for (fe[i] = n, e = 0; e < 1 << te[i]; e++) ue[n++] = i;
            for (ue[n - 1] = i, a = 0, i = 0; i < 16; i++) for (de[i] = a, e = 0; e < 1 << ne[i]; e++) le[a++] = i;
            for (a >>= 7; i < W; i++) for (de[i] = a << 7, e = 0; e < 1 << ne[i] - 7; e++) le[256 + a++] = i;
            for (t = 0; t <= $; t++) o[t] = 0;
            for (e = 0; e <= 143;) oe[2 * e + 1] = 8,
            e++,
            o[8]++;
            for (; e <= 255;) oe[2 * e + 1] = 9,
            e++,
            o[9]++;
            for (; e <= 279;) oe[2 * e + 1] = 7,
            e++,
            o[7]++;
            for (; e <= 287;) oe[2 * e + 1] = 8,
            e++,
            o[8]++;
            for (p(oe, Z + 1, o), e = 0; e < W; e++) se[2 * e + 1] = 5,
            se[2 * e] = f(e, 5);
            he = new r(oe, te, D + 1, Z, $),
            pe = new r(se, ne, 0, W, $),
            ce = new r(new Array(0), ie, 0, q, X)
        }
        function m(e) {
            var t;
            for (t = 0; t < Z; t++) e.dyn_ltree[2 * t] = 0;
            for (t = 0; t < W; t++) e.dyn_dtree[2 * t] = 0;
            for (t = 0; t < q; t++) e.bl_tree[2 * t] = 0;
            e.dyn_ltree[2 * J] = 1,
            e.opt_len = e.static_len = 0,
            e.last_lit = e.matches = 0
        }
        function y(e) {
            e.bi_valid > 8 ? s(e, e.bi_buf) : e.bi_valid > 0 && (e.pending_buf[e.pending++] = e.bi_buf),
            e.bi_buf = 0,
            e.bi_valid = 0
        }
        function g(e, t, n, i) {
            y(e),
            i && (s(e, n), s(e, ~n)),
            C.arraySet(e.pending_buf, e.window, t, n, e.pending),
            e.pending += n
        }
        function v(e, t, n, i) {
            var r = 2 * t,
            a = 2 * n;
            return e[r] < e[a] || e[r] === e[a] && i[t] <= i[n]
        }
        function _(e, t, n) {
            for (var i = e.heap[n], r = n << 1; r <= e.heap_len && (r < e.heap_len && v(t, e.heap[r + 1], e.heap[r], e.depth) && r++, !v(t, i, e.heap[r], e.depth));) e.heap[n] = e.heap[r],
            n = r,
            r <<= 1;
            e.heap[n] = i
        }
        function w(e, t, n) {
            var i, r, a, s, f = 0;
            if (0 !== e.last_lit) do i = e.pending_buf[e.d_buf + 2 * f] << 8 | e.pending_buf[e.d_buf + 2 * f + 1],
            r = e.pending_buf[e.l_buf + f],
            f++,
            0 === i ? u(e, r, t) : (a = ue[r], u(e, a + D + 1, t), s = te[a], 0 !== s && (r -= fe[a], l(e, r, s)), i--, a = o(i), u(e, a, n), s = ne[a], 0 !== s && (i -= de[a], l(e, i, s)));
            while (f < e.last_lit);
            u(e, J, t)
        }
        function b(e, t) {
            var n, i, r, a = t.dyn_tree,
            o = t.stat_desc.static_tree,
            s = t.stat_desc.has_stree,
            l = t.stat_desc.elems,
            u = -1;
            for (e.heap_len = 0, e.heap_max = H, n = 0; n < l; n++) 0 !== a[2 * n] ? (e.heap[++e.heap_len] = u = n, e.depth[n] = 0) : a[2 * n + 1] = 0;
            for (; e.heap_len < 2;) r = e.heap[++e.heap_len] = u < 2 ? ++u: 0,
            a[2 * r] = 1,
            e.depth[r] = 0,
            e.opt_len--,
            s && (e.static_len -= o[2 * r + 1]);
            for (t.max_code = u, n = e.heap_len >> 1; n >= 1; n--) _(e, a, n);
            r = l;
            do n = e.heap[1],
            e.heap[1] = e.heap[e.heap_len--],
            _(e, a, 1),
            i = e.heap[1],
            e.heap[--e.heap_max] = n,
            e.heap[--e.heap_max] = i,
            a[2 * r] = a[2 * n] + a[2 * i],
            e.depth[r] = (e.depth[n] >= e.depth[i] ? e.depth[n] : e.depth[i]) + 1,
            a[2 * n + 1] = a[2 * i + 1] = r,
            e.heap[1] = r++,
            _(e, a, 1);
            while (e.heap_len >= 2);
            e.heap[--e.heap_max] = e.heap[1],
            h(e, t),
            p(a, u, e.bl_count)
        }
        function E(e, t, n) {
            var i, r, a = -1,
            o = t[1],
            s = 0,
            l = 7,
            u = 4;
            for (0 === o && (l = 138, u = 3), t[2 * (n + 1) + 1] = 65535, i = 0; i <= n; i++) r = o,
            o = t[2 * (i + 1) + 1],
            ++s < l && r === o || (s < u ? e.bl_tree[2 * r] += s: 0 !== r ? (r !== a && e.bl_tree[2 * r]++, e.bl_tree[2 * Q]++) : s <= 10 ? e.bl_tree[2 * K]++:e.bl_tree[2 * ee]++, s = 0, a = r, 0 === o ? (l = 138, u = 3) : r === o ? (l = 6, u = 3) : (l = 7, u = 4))
        }
        function T(e, t, n) {
            var i, r, a = -1,
            o = t[1],
            s = 0,
            f = 7,
            d = 4;
            for (0 === o && (f = 138, d = 3), i = 0; i <= n; i++) if (r = o, o = t[2 * (i + 1) + 1], !(++s < f && r === o)) {
                if (s < d) {
                    do u(e, r, e.bl_tree);
                    while (0 !== --s)
                } else 0 !== r ? (r !== a && (u(e, r, e.bl_tree), s--), u(e, Q, e.bl_tree), l(e, s - 3, 2)) : s <= 10 ? (u(e, K, e.bl_tree), l(e, s - 3, 3)) : (u(e, ee, e.bl_tree), l(e, s - 11, 7));
                s = 0,
                a = r,
                0 === o ? (f = 138, d = 3) : r === o ? (f = 6, d = 3) : (f = 7, d = 4)
            }
        }
        function S(e) {
            var t;
            for (E(e, e.dyn_ltree, e.l_desc.max_code), E(e, e.dyn_dtree, e.d_desc.max_code), b(e, e.bl_desc), t = q - 1; t >= 3 && 0 === e.bl_tree[2 * re[t] + 1]; t--);
            return e.opt_len += 3 * (t + 1) + 5 + 5 + 4,
            t
        }
        function I(e, t, n, i) {
            var r;
            for (l(e, t - 257, 5), l(e, n - 1, 5), l(e, i - 4, 4), r = 0; r < i; r++) l(e, e.bl_tree[2 * re[r] + 1], 3);
            T(e, e.dyn_ltree, t - 1),
            T(e, e.dyn_dtree, n - 1)
        }
        function k(e) {
            var t, n = 4093624447;
            for (t = 0; t <= 31; t++, n >>>= 1) if (1 & n && 0 !== e.dyn_ltree[2 * t]) return O;
            if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return B;
            for (t = 32; t < D; t++) if (0 !== e.dyn_ltree[2 * t]) return B;
            return O
        }
        function A(e) {
            me || (c(), me = !0),
            e.l_desc = new a(e.dyn_ltree, he),
            e.d_desc = new a(e.dyn_dtree, pe),
            e.bl_desc = new a(e.bl_tree, ce),
            e.bi_buf = 0,
            e.bi_valid = 0,
            m(e)
        }
        function P(e, t, n, i) {
            l(e, (N << 1) + (i ? 1 : 0), 3),
            g(e, t, n, !0)
        }
        function x(e) {
            l(e, z << 1, 3),
            u(e, J, oe),
            d(e)
        }
        function L(e, t, n, i) {
            var r, a, o = 0;
            e.level > 0 ? (e.strm.data_type === M && (e.strm.data_type = k(e)), b(e, e.l_desc), b(e, e.d_desc), o = S(e), r = e.opt_len + 3 + 7 >>> 3, a = e.static_len + 3 + 7 >>> 3, a <= r && (r = a)) : r = a = n + 5,
            n + 4 <= r && t !== -1 ? P(e, t, n, i) : e.strategy === U || a === r ? (l(e, (z << 1) + (i ? 1 : 0), 3), w(e, oe, se)) : (l(e, (V << 1) + (i ? 1 : 0), 3), I(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, o + 1), w(e, e.dyn_ltree, e.dyn_dtree)),
            m(e),
            i && y(e)
        }
        function R(e, t, n) {
            return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255,
            e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t,
            e.pending_buf[e.l_buf + e.last_lit] = 255 & n,
            e.last_lit++,
            0 === t ? e.dyn_ltree[2 * n]++:(e.matches++, t--, e.dyn_ltree[2 * (ue[n] + D + 1)]++, e.dyn_dtree[2 * o(t)]++),
            e.last_lit === e.lit_bufsize - 1
        }
        var C = n(14),
        U = 4,
        O = 0,
        B = 1,
        M = 2,
        N = 0,
        z = 1,
        V = 2,
        Y = 3,
        F = 258,
        j = 29,
        D = 256,
        Z = D + 1 + j,
        W = 30,
        q = 19,
        H = 2 * Z + 1,
        $ = 15,
        G = 16,
        X = 7,
        J = 256,
        Q = 16,
        K = 17,
        ee = 18,
        te = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0],
        ne = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13],
        ie = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7],
        re = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
        ae = 512,
        oe = new Array(2 * (Z + 2));
        i(oe);
        var se = new Array(2 * W);
        i(se);
        var le = new Array(ae);
        i(le);
        var ue = new Array(F - Y + 1);
        i(ue);
        var fe = new Array(j);
        i(fe);
        var de = new Array(W);
        i(de);
        var he, pe, ce, me = !1;
        t._tr_init = A,
        t._tr_stored_block = P,
        t._tr_flush_block = L,
        t._tr_tally = R,
        t._tr_align = x
    },
    function(e, t) {
        "use strict";
        function n() {
            this.input = null,
            this.next_in = 0,
            this.avail_in = 0,
            this.total_in = 0,
            this.output = null,
            this.next_out = 0,
            this.avail_out = 0,
            this.total_out = 0,
            this.msg = "",
            this.state = null,
            this.data_type = 2,
            this.adler = 0
        }
        e.exports = n
    },
    function(e, t, n) {
        var i, r, a; (function(e, o) {
            /**
	 * @license protobuf.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
	 * Released under the Apache License, Version 2.0
	 * see: https://github.com/dcodeIO/protobuf.js for details
	 */
            !
            function(e, s) {
                n(25).amd ? (r = [n(30)], i = s, a = "function" == typeof i ? i.apply(t, r) : i, !(void 0 !== a && (o.exports = a))) : "object" == typeof o && o && o.exports ? o.exports = s(n(30), !0) : (e.dcodeIO = e.dcodeIO || {}).ProtoBuf = s(e.dcodeIO.ByteBuffer)
            } (this,
            function(t, i) {
                "use strict";
                var r = {};
                return r.ByteBuffer = t,
                r.Long = t.Long || null,
                r.VERSION = "5.0.1",
                r.WIRE_TYPES = {},
                r.WIRE_TYPES.VARINT = 0,
                r.WIRE_TYPES.BITS64 = 1,
                r.WIRE_TYPES.LDELIM = 2,
                r.WIRE_TYPES.STARTGROUP = 3,
                r.WIRE_TYPES.ENDGROUP = 4,
                r.WIRE_TYPES.BITS32 = 5,
                r.PACKABLE_WIRE_TYPES = [r.WIRE_TYPES.VARINT, r.WIRE_TYPES.BITS64, r.WIRE_TYPES.BITS32],
                r.TYPES = {
                    int32: {
                        name: "int32",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: 0
                    },
                    uint32: {
                        name: "uint32",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: 0
                    },
                    sint32: {
                        name: "sint32",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: 0
                    },
                    int64: {
                        name: "int64",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: r.Long ? r.Long.ZERO: void 0
                    },
                    uint64: {
                        name: "uint64",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: r.Long ? r.Long.UZERO: void 0
                    },
                    sint64: {
                        name: "sint64",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: r.Long ? r.Long.ZERO: void 0
                    },
                    bool: {
                        name: "bool",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: !1
                    },
                    double: {
                        name: "double",
                        wireType: r.WIRE_TYPES.BITS64,
                        defaultValue: 0
                    },
                    string: {
                        name: "string",
                        wireType: r.WIRE_TYPES.LDELIM,
                        defaultValue: ""
                    },
                    bytes: {
                        name: "bytes",
                        wireType: r.WIRE_TYPES.LDELIM,
                        defaultValue: null
                    },
                    fixed32: {
                        name: "fixed32",
                        wireType: r.WIRE_TYPES.BITS32,
                        defaultValue: 0
                    },
                    sfixed32: {
                        name: "sfixed32",
                        wireType: r.WIRE_TYPES.BITS32,
                        defaultValue: 0
                    },
                    fixed64: {
                        name: "fixed64",
                        wireType: r.WIRE_TYPES.BITS64,
                        defaultValue: r.Long ? r.Long.UZERO: void 0
                    },
                    sfixed64: {
                        name: "sfixed64",
                        wireType: r.WIRE_TYPES.BITS64,
                        defaultValue: r.Long ? r.Long.ZERO: void 0
                    },
                    float: {
                        name: "float",
                        wireType: r.WIRE_TYPES.BITS32,
                        defaultValue: 0
                    },
                    enum: {
                        name: "enum",
                        wireType: r.WIRE_TYPES.VARINT,
                        defaultValue: 0
                    },
                    message: {
                        name: "message",
                        wireType: r.WIRE_TYPES.LDELIM,
                        defaultValue: null
                    },
                    group: {
                        name: "group",
                        wireType: r.WIRE_TYPES.STARTGROUP,
                        defaultValue: null
                    }
                },
                r.MAP_KEY_TYPES = [r.TYPES.int32, r.TYPES.sint32, r.TYPES.sfixed32, r.TYPES.uint32, r.TYPES.fixed32, r.TYPES.int64, r.TYPES.sint64, r.TYPES.sfixed64, r.TYPES.uint64, r.TYPES.fixed64, r.TYPES.bool, r.TYPES.string, r.TYPES.bytes],
                r.ID_MIN = 1,
                r.ID_MAX = 536870911,
                r.convertFieldsToCamelCase = !1,
                r.populateAccessors = !0,
                r.populateDefaults = !0,
                r.Util = function() {
                    var t = {};
                    return t.IS_NODE = !("object" != typeof e || e + "" != "[object process]" || e.browser),
                    t.XHR = function() {
                        for (var e = [function() {
                            return new XMLHttpRequest
                        },
                        function() {
                            return new ActiveXObject("Msxml2.XMLHTTP")
                        },
                        function() {
                            return new ActiveXObject("Msxml3.XMLHTTP")
                        },
                        function() {
                            return new ActiveXObject("Microsoft.XMLHTTP")
                        }], t = null, n = 0; n < e.length; n++) {
                            try {
                                t = e[n]()
                            } catch(e) {
                                continue
                            }
                            break
                        }
                        if (!t) throw Error("XMLHttpRequest is not supported");
                        return t
                    },
                    t.fetch = function(e, i) {
                        if (i && "function" != typeof i && (i = null), t.IS_NODE) {
                            var r = n(119);
                            if (i) r.readFile(e,
                            function(e, t) {
                                i(e ? null: "" + t)
                            });
                            else try {
                                return r.readFileSync(e)
                            } catch(e) {
                                return null
                            }
                        } else {
                            var a = t.XHR();
                            if (a.open("GET", e, !!i), a.setRequestHeader("Accept", "text/plain"), "function" == typeof a.overrideMimeType && a.overrideMimeType("text/plain"), !i) return a.send(null),
                            200 == a.status || 0 == a.status && "string" == typeof a.responseText ? a.responseText: null;
                            if (a.onreadystatechange = function() {
                                4 == a.readyState && i(200 == a.status || 0 == a.status && "string" == typeof a.responseText ? a.responseText: null)
                            },
                            4 == a.readyState) return;
                            a.send(null)
                        }
                    },
                    t.toCamelCase = function(e) {
                        return e.replace(/_([a-zA-Z])/g,
                        function(e, t) {
                            return t.toUpperCase()
                        })
                    },
                    t
                } (),
                r.Lang = {
                    DELIM: /[\s\{\}=;:\[\],'"\(\)<>]/g,
                    RULE: /^(?:required|optional|repeated|map)$/,
                    TYPE: /^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,
                    NAME: /^[a-zA-Z_][a-zA-Z_0-9]*$/,
                    TYPEDEF: /^[a-zA-Z][a-zA-Z_0-9]*$/,
                    TYPEREF: /^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)+$/,
                    FQTYPEREF: /^(?:\.[a-zA-Z][a-zA-Z_0-9]*)+$/,
                    NUMBER: /^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,
                    NUMBER_DEC: /^(?:[1-9][0-9]*|0)$/,
                    NUMBER_HEX: /^0[xX][0-9a-fA-F]+$/,
                    NUMBER_OCT: /^0[0-7]+$/,
                    NUMBER_FLT: /^([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,
                    BOOL: /^(?:true|false)$/i,
                    ID: /^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,
                    NEGID: /^\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,
                    WHITESPACE: /\s/,
                    STRING: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")|(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,
                    STRING_DQ: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,
                    STRING_SQ: /(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g
                },
                r.Reflect = function(e) {
                    function n(n) {
                        if ("string" == typeof n && (n = e.TYPES[n]), "undefined" == typeof n.defaultValue) throw Error("default value for type " + n.name + " is not supported");
                        return n == e.TYPES.bytes ? new t(0) : n.defaultValue
                    }
                    function i(t, n) {
                        if (t && "number" == typeof t.low && "number" == typeof t.high && "boolean" == typeof t.unsigned && t.low === t.low && t.high === t.high) return new e.Long(t.low, t.high, "undefined" == typeof n ? t.unsigned: n);
                        if ("string" == typeof t) return e.Long.fromString(t, n || !1, 10);
                        if ("number" == typeof t) return e.Long.fromNumber(t, n || !1);
                        throw Error("not convertible to Long")
                    }
                    function r(t, n) {
                        var i = n.readVarint32(),
                        a = 7 & i,
                        o = i >>> 3;
                        switch (a) {
                        case e.WIRE_TYPES.VARINT:
                            do i = n.readUint8();
                            while (128 === (128 & i));
                            break;
                        case e.WIRE_TYPES.BITS64:
                            n.offset += 8;
                            break;
                        case e.WIRE_TYPES.LDELIM:
                            i = n.readVarint32(),
                            n.offset += i;
                            break;
                        case e.WIRE_TYPES.STARTGROUP:
                            r(o, n);
                            break;
                        case e.WIRE_TYPES.ENDGROUP:
                            if (o === t) return ! 1;
                            throw Error("Illegal GROUPEND after unknown group: " + o + " (" + t + " expected)");
                        case e.WIRE_TYPES.BITS32:
                            n.offset += 4;
                            break;
                        default:
                            throw Error("Illegal wire type in unknown group " + t + ": " + a)
                        }
                        return ! 0
                    }
                    var a = {},
                    o = function(e, t, n) {
                        this.builder = e,
                        this.parent = t,
                        this.name = n,
                        this.className
                    },
                    s = o.prototype;
                    s.fqn = function() {
                        for (var e = this.name,
                        t = this;;) {
                            if (t = t.parent, null == t) break;
                            e = t.name + "." + e
                        }
                        return e
                    },
                    s.toString = function(e) {
                        return (e ? this.className + " ": "") + this.fqn()
                    },
                    s.build = function() {
                        throw Error(this.toString(!0) + " cannot be built directly")
                    },
                    a.T = o;
                    var l = function(e, t, n, i, r) {
                        o.call(this, e, t, n),
                        this.className = "Namespace",
                        this.children = [],
                        this.options = i || {},
                        this.syntax = r || "proto2"
                    },
                    u = l.prototype = Object.create(o.prototype);
                    u.getChildren = function(e) {
                        if (e = e || null, null == e) return this.children.slice();
                        for (var t = [], n = 0, i = this.children.length; n < i; ++n) this.children[n] instanceof e && t.push(this.children[n]);
                        return t
                    },
                    u.addChild = function(e) {
                        var t;
                        if (t = this.getChild(e.name)) if (t instanceof h.Field && t.name !== t.originalName && null === this.getChild(t.originalName)) t.name = t.originalName;
                        else {
                            if (! (e instanceof h.Field && e.name !== e.originalName && null === this.getChild(e.originalName))) throw Error("Duplicate name in namespace " + this.toString(!0) + ": " + e.name);
                            e.name = e.originalName
                        }
                        this.children.push(e)
                    },
                    u.getChild = function(e) {
                        for (var t = "number" == typeof e ? "id": "name", n = 0, i = this.children.length; n < i; ++n) if (this.children[n][t] === e) return this.children[n];
                        return null
                    },
                    u.resolve = function(e, t) {
                        var n = "string" == typeof e ? e.split(".") : e,
                        i = this,
                        r = 0;
                        if ("" === n[r]) {
                            for (; null !== i.parent;) i = i.parent;
                            r++
                        }
                        var o;
                        do {
                            do {
                                if (! (i instanceof a.Namespace)) {
                                    i = null;
                                    break
                                }
                                if (o = i.getChild(n[r]), !o || !(o instanceof a.T) || t && !(o instanceof a.Namespace)) {
                                    i = null;
                                    break
                                }
                                i = o, r++
                            } while ( r < n . length );
                            if (null != i) break;
                            if (null !== this.parent) return this.parent.resolve(e, t)
                        } while ( null != i );
                        return i
                    },
                    u.qn = function(e) {
                        var t = [],
                        n = e;
                        do t.unshift(n.name),
                        n = n.parent;
                        while (null !== n);
                        for (var i = 1; i <= t.length; i++) {
                            var r = t.slice(t.length - i);
                            if (e === this.resolve(r, e instanceof a.Namespace)) return r.join(".")
                        }
                        return e.fqn()
                    },
                    u.build = function() {
                        for (var e, t = {},
                        n = this.children,
                        i = 0,
                        r = n.length; i < r; ++i) e = n[i],
                        e instanceof l && (t[e.name] = e.build());
                        return Object.defineProperty && Object.defineProperty(t, "$options", {
                            value: this.buildOpt()
                        }),
                        t
                    },
                    u.buildOpt = function() {
                        for (var e = {},
                        t = Object.keys(this.options), n = 0, i = t.length; n < i; ++n) {
                            var r = t[n],
                            a = this.options[t[n]];
                            e[r] = a
                        }
                        return e
                    },
                    u.getOption = function(e) {
                        return "undefined" == typeof e ? this.options: "undefined" != typeof this.options[e] ? this.options[e] : null
                    },
                    a.Namespace = l;
                    var f = function(t, n, i, r) {
                        if (this.type = t, this.resolvedType = n, this.isMapKey = i, this.syntax = r, i && e.MAP_KEY_TYPES.indexOf(t) < 0) throw Error("Invalid map key type: " + t.name)
                    },
                    d = f.prototype;
                    f.defaultFieldValue = n,
                    d.verifyValue = function(n) {
                        function r(e, t) {
                            throw Error("Illegal value for " + a.toString(!0) + " of type " + a.type.name + ": " + e + " (" + t + ")")
                        }
                        var a = this;
                        switch (this.type) {
                        case e.TYPES.int32:
                        case e.TYPES.sint32:
                        case e.TYPES.sfixed32:
                            return ("number" != typeof n || n === n && n % 1 !== 0) && r(typeof n, "not an integer"),
                            n > 4294967295 ? 0 | n: n;
                        case e.TYPES.uint32:
                        case e.TYPES.fixed32:
                            return ("number" != typeof n || n === n && n % 1 !== 0) && r(typeof n, "not an integer"),
                            n < 0 ? n >>> 0 : n;
                        case e.TYPES.int64:
                        case e.TYPES.sint64:
                        case e.TYPES.sfixed64:
                            if (e.Long) try {
                                return i(n, !1)
                            } catch(e) {
                                r(typeof n, e.message)
                            } else r(typeof n, "requires Long.js");
                        case e.TYPES.uint64:
                        case e.TYPES.fixed64:
                            if (e.Long) try {
                                return i(n, !0)
                            } catch(e) {
                                r(typeof n, e.message)
                            } else r(typeof n, "requires Long.js");
                        case e.TYPES.bool:
                            return "boolean" != typeof n && r(typeof n, "not a boolean"),
                            n;
                        case e.TYPES.float:
                        case e.TYPES.double:
                            return "number" != typeof n && r(typeof n, "not a number"),
                            n;
                        case e.TYPES.string:
                            return "string" == typeof n || n && n instanceof String || r(typeof n, "not a string"),
                            "" + n;
                        case e.TYPES.bytes:
                            return t.isByteBuffer(n) ? n: t.wrap(n, "base64");
                        case e.TYPES.enum:
                            var o = this.resolvedType.getChildren(e.Reflect.Enum.Value);
                            for (l = 0; l < o.length; l++) {
                                if (o[l].name == n) return o[l].id;
                                if (o[l].id == n) return o[l].id
                            }
                            if ("proto3" === this.syntax) return ("number" != typeof n || n === n && n % 1 !== 0) && r(typeof n, "not an integer"),
                            (n > 4294967295 || n < 0) && r(typeof n, "not in range for uint32"),
                            n;
                            r(n, "not a valid enum value");
                        case e.TYPES.group:
                        case e.TYPES.message:
                            if (n && "object" == typeof n || r(typeof n, "object expected"), n instanceof this.resolvedType.clazz) return n;
                            if (n instanceof e.Builder.Message) {
                                var s = {};
                                for (var l in n) n.hasOwnProperty(l) && (s[l] = n[l]);
                                n = s
                            }
                            return new this.resolvedType.clazz(n)
                        }
                        throw Error("[INTERNAL] Illegal value for " + this.toString(!0) + ": " + n + " (undefined type " + this.type + ")")
                    },
                    d.calculateLength = function(n, i) {
                        if (null === i) return 0;
                        var r;
                        switch (this.type) {
                        case e.TYPES.int32:
                            return i < 0 ? t.calculateVarint64(i) : t.calculateVarint32(i);
                        case e.TYPES.uint32:
                            return t.calculateVarint32(i);
                        case e.TYPES.sint32:
                            return t.calculateVarint32(t.zigZagEncode32(i));
                        case e.TYPES.fixed32:
                        case e.TYPES.sfixed32:
                        case e.TYPES.float:
                            return 4;
                        case e.TYPES.int64:
                        case e.TYPES.uint64:
                            return t.calculateVarint64(i);
                        case e.TYPES.sint64:
                            return t.calculateVarint64(t.zigZagEncode64(i));
                        case e.TYPES.fixed64:
                        case e.TYPES.sfixed64:
                            return 8;
                        case e.TYPES.bool:
                            return 1;
                        case e.TYPES.enum:
                            return t.calculateVarint32(i);
                        case e.TYPES.double:
                            return 8;
                        case e.TYPES.string:
                            return r = t.calculateUTF8Bytes(i),
                            t.calculateVarint32(r) + r;
                        case e.TYPES.bytes:
                            if (i.remaining() < 0) throw Error("Illegal value for " + this.toString(!0) + ": " + i.remaining() + " bytes remaining");
                            return t.calculateVarint32(i.remaining()) + i.remaining();
                        case e.TYPES.message:
                            return r = this.resolvedType.calculate(i),
                            t.calculateVarint32(r) + r;
                        case e.TYPES.group:
                            return r = this.resolvedType.calculate(i),
                            r + t.calculateVarint32(n << 3 | e.WIRE_TYPES.ENDGROUP)
                        }
                        throw Error("[INTERNAL] Illegal value to encode in " + this.toString(!0) + ": " + i + " (unknown type)")
                    },
                    d.encodeValue = function(n, i, r) {
                        if (null === i) return r;
                        switch (this.type) {
                        case e.TYPES.int32:
                            i < 0 ? r.writeVarint64(i) : r.writeVarint32(i);
                            break;
                        case e.TYPES.uint32:
                            r.writeVarint32(i);
                            break;
                        case e.TYPES.sint32:
                            r.writeVarint32ZigZag(i);
                            break;
                        case e.TYPES.fixed32:
                            r.writeUint32(i);
                            break;
                        case e.TYPES.sfixed32:
                            r.writeInt32(i);
                            break;
                        case e.TYPES.int64:
                        case e.TYPES.uint64:
                            r.writeVarint64(i);
                            break;
                        case e.TYPES.sint64:
                            r.writeVarint64ZigZag(i);
                            break;
                        case e.TYPES.fixed64:
                            r.writeUint64(i);
                            break;
                        case e.TYPES.sfixed64:
                            r.writeInt64(i);
                            break;
                        case e.TYPES.bool:
                            "string" == typeof i ? r.writeVarint32("false" === i.toLowerCase() ? 0 : !!i) : r.writeVarint32(i ? 1 : 0);
                            break;
                        case e.TYPES.enum:
                            r.writeVarint32(i);
                            break;
                        case e.TYPES.float:
                            r.writeFloat32(i);
                            break;
                        case e.TYPES.double:
                            r.writeFloat64(i);
                            break;
                        case e.TYPES.string:
                            r.writeVString(i);
                            break;
                        case e.TYPES.bytes:
                            if (i.remaining() < 0) throw Error("Illegal value for " + this.toString(!0) + ": " + i.remaining() + " bytes remaining");
                            var a = i.offset;
                            r.writeVarint32(i.remaining()),
                            r.append(i),
                            i.offset = a;
                            break;
                        case e.TYPES.message:
                            var o = (new t).LE();
                            this.resolvedType.encode(i, o),
                            r.writeVarint32(o.offset),
                            r.append(o.flip());
                            break;
                        case e.TYPES.group:
                            this.resolvedType.encode(i, r),
                            r.writeVarint32(n << 3 | e.WIRE_TYPES.ENDGROUP);
                            break;
                        default:
                            throw Error("[INTERNAL] Illegal value to encode in " + this.toString(!0) + ": " + i + " (unknown type)")
                        }
                        return r
                    },
                    d.decode = function(t, n, i) {
                        if (n != this.type.wireType) throw Error("Unexpected wire type for element");
                        var r, a;
                        switch (this.type) {
                        case e.TYPES.int32:
                            return 0 | t.readVarint32();
                        case e.TYPES.uint32:
                            return t.readVarint32() >>> 0;
                        case e.TYPES.sint32:
                            return 0 | t.readVarint32ZigZag();
                        case e.TYPES.fixed32:
                            return t.readUint32() >>> 0;
                        case e.TYPES.sfixed32:
                            return 0 | t.readInt32();
                        case e.TYPES.int64:
                            return t.readVarint64();
                        case e.TYPES.uint64:
                            return t.readVarint64().toUnsigned();
                        case e.TYPES.sint64:
                            return t.readVarint64ZigZag();
                        case e.TYPES.fixed64:
                            return t.readUint64();
                        case e.TYPES.sfixed64:
                            return t.readInt64();
                        case e.TYPES.bool:
                            return !! t.readVarint32();
                        case e.TYPES.enum:
                            return t.readVarint32();
                        case e.TYPES.float:
                            return t.readFloat();
                        case e.TYPES.double:
                            return t.readDouble();
                        case e.TYPES.string:
                            return t.readVString();
                        case e.TYPES.bytes:
                            if (a = t.readVarint32(), t.remaining() < a) throw Error("Illegal number of bytes for " + this.toString(!0) + ": " + a + " required but got only " + t.remaining());
                            return r = t.clone(),
                            r.limit = r.offset + a,
                            t.offset += a,
                            r;
                        case e.TYPES.message:
                            return a = t.readVarint32(),
                            this.resolvedType.decode(t, a);
                        case e.TYPES.group:
                            return this.resolvedType.decode(t, -1, i)
                        }
                        throw Error("[INTERNAL] Illegal decode type")
                    },
                    d.valueFromString = function(n) {
                        if (!this.isMapKey) throw Error("valueFromString() called on non-map-key element");
                        switch (this.type) {
                        case e.TYPES.int32:
                        case e.TYPES.sint32:
                        case e.TYPES.sfixed32:
                        case e.TYPES.uint32:
                        case e.TYPES.fixed32:
                            return this.verifyValue(parseInt(n));
                        case e.TYPES.int64:
                        case e.TYPES.sint64:
                        case e.TYPES.sfixed64:
                        case e.TYPES.uint64:
                        case e.TYPES.fixed64:
                            return this.verifyValue(n);
                        case e.TYPES.bool:
                            return "true" === n;
                        case e.TYPES.string:
                            return this.verifyValue(n);
                        case e.TYPES.bytes:
                            return t.fromBinary(n)
                        }
                    },
                    d.valueToString = function(t) {
                        if (!this.isMapKey) throw Error("valueToString() called on non-map-key element");
                        return this.type === e.TYPES.bytes ? t.toString("binary") : t.toString()
                    },
                    a.Element = f;
                    var h = function(e, t, n, i, r, a) {
                        l.call(this, e, t, n, i, a),
                        this.className = "Message",
                        this.extensions = void 0,
                        this.clazz = null,
                        this.isGroup = !!r,
                        this._fields = null,
                        this._fieldsById = null,
                        this._fieldsByName = null
                    },
                    p = h.prototype = Object.create(l.prototype);
                    p.build = function(n) {
                        if (this.clazz && !n) return this.clazz;
                        var i = function(e, n) {
                            function i(n, r, a, o) {
                                if (null === n || "object" != typeof n) {
                                    if (o && o instanceof e.Reflect.Enum) {
                                        var s = e.Reflect.Enum.getName(o.object, n);
                                        if (null !== s) return s
                                    }
                                    return n
                                }
                                if (t.isByteBuffer(n)) return r ? n.toBase64() : n.toBuffer();
                                if (e.Long.isLong(n)) return a ? n.toString() : e.Long.fromValue(n);
                                var l;
                                if (Array.isArray(n)) return l = [],
                                n.forEach(function(e, t) {
                                    l[t] = i(e, r, a, o)
                                }),
                                l;
                                if (l = {},
                                n instanceof e.Map) {
                                    for (var u = n.entries(), f = u.next(); ! f.done; f = u.next()) l[n.keyElem.valueToString(f.value[0])] = i(f.value[1], r, a, n.valueElem.resolvedType);
                                    return l
                                }
                                var d = n.$type,
                                h = void 0;
                                for (var p in n) n.hasOwnProperty(p) && (d && (h = d.getChild(p)) ? l[p] = i(n[p], r, a, h.resolvedType) : l[p] = i(n[p], r, a));
                                return l
                            }
                            var r = n.getChildren(e.Reflect.Message.Field),
                            a = n.getChildren(e.Reflect.Message.OneOf),
                            o = function(i, s) {
                                e.Builder.Message.call(this);
                                for (var l = 0,
                                u = a.length; l < u; ++l) this[a[l].name] = null;
                                for (l = 0, u = r.length; l < u; ++l) {
                                    var f = r[l];
                                    this[f.name] = f.repeated ? [] : f.map ? new e.Map(f) : null,
                                    !f.required && "proto3" !== n.syntax || null === f.defaultValue || (this[f.name] = f.defaultValue)
                                }
                                if (arguments.length > 0) {
                                    var d;
                                    if (1 !== arguments.length || null === i || "object" != typeof i || !("function" != typeof i.encode || i instanceof o) || Array.isArray(i) || i instanceof e.Map || t.isByteBuffer(i) || i instanceof ArrayBuffer || e.Long && i instanceof e.Long) for (l = 0, u = arguments.length; l < u; ++l)"undefined" != typeof(d = arguments[l]) && this.$set(r[l].name, d);
                                    else this.$set(i)
                                }
                            },
                            s = o.prototype = Object.create(e.Builder.Message.prototype);
                            s.add = function(t, i, r) {
                                var a = n._fieldsByName[t];
                                if (!r) {
                                    if (!a) throw Error(this + "#" + t + " is undefined");
                                    if (! (a instanceof e.Reflect.Message.Field)) throw Error(this + "#" + t + " is not a field: " + a.toString(!0));
                                    if (!a.repeated) throw Error(this + "#" + t + " is not a repeated field");
                                    i = a.verifyValue(i, !0)
                                }
                                return null === this[t] && (this[t] = []),
                                this[t].push(i),
                                this
                            },
                            s.$add = s.add,
                            s.set = function(t, i, r) {
                                if (t && "object" == typeof t) {
                                    r = i;
                                    for (var a in t) t.hasOwnProperty(a) && "undefined" != typeof(i = t[a]) && this.$set(a, i, r);
                                    return this
                                }
                                var o = n._fieldsByName[t];
                                if (r) this[t] = i;
                                else {
                                    if (!o) throw Error(this + "#" + t + " is not a field: undefined");
                                    if (! (o instanceof e.Reflect.Message.Field)) throw Error(this + "#" + t + " is not a field: " + o.toString(!0));
                                    this[o.name] = i = o.verifyValue(i)
                                }
                                if (o && o.oneof) {
                                    var s = this[o.oneof.name];
                                    null !== i ? (null !== s && s !== o.name && (this[s] = null), this[o.oneof.name] = o.name) : s === t && (this[o.oneof.name] = null)
                                }
                                return this
                            },
                            s.$set = s.set,
                            s.get = function(t, i) {
                                if (i) return this[t];
                                var r = n._fieldsByName[t];
                                if (! (r && r instanceof e.Reflect.Message.Field)) throw Error(this + "#" + t + " is not a field: undefined");
                                if (! (r instanceof e.Reflect.Message.Field)) throw Error(this + "#" + t + " is not a field: " + r.toString(!0));
                                return this[r.name]
                            },
                            s.$get = s.get;
                            for (var l = 0; l < r.length; l++) {
                                var u = r[l];
                                u instanceof e.Reflect.Message.ExtensionField || n.builder.options.populateAccessors &&
                                function(e) {
                                    var t = e.originalName.replace(/(_[a-zA-Z])/g,
                                    function(e) {
                                        return e.toUpperCase().replace("_", "")
                                    });
                                    t = t.substring(0, 1).toUpperCase() + t.substring(1);
                                    var i = e.originalName.replace(/([A-Z])/g,
                                    function(e) {
                                        return "_" + e
                                    }),
                                    r = function(t, n) {
                                        return this[e.name] = n ? t: e.verifyValue(t),
                                        this
                                    },
                                    a = function() {
                                        return this[e.name]
                                    };
                                    null === n.getChild("set" + t) && (s["set" + t] = r),
                                    null === n.getChild("set_" + i) && (s["set_" + i] = r),
                                    null === n.getChild("get" + t) && (s["get" + t] = a),
                                    null === n.getChild("get_" + i) && (s["get_" + i] = a)
                                } (u)
                            }
                            s.encode = function(e, i) {
                                "boolean" == typeof e && (i = e, e = void 0);
                                var r = !1;
                                e || (e = new t, r = !0);
                                var a = e.littleEndian;
                                try {
                                    return n.encode(this, e.LE(), i),
                                    (r ? e.flip() : e).LE(a)
                                } catch(t) {
                                    throw e.LE(a),
                                    t
                                }
                            },
                            o.encode = function(e, t, n) {
                                return new o(e).encode(t, n)
                            },
                            s.calculate = function() {
                                return n.calculate(this)
                            },
                            s.encodeDelimited = function(e, i) {
                                var r = !1;
                                e || (e = new t, r = !0);
                                var a = (new t).LE();
                                return n.encode(this, a, i).flip(),
                                e.writeVarint32(a.remaining()),
                                e.append(a),
                                r ? e.flip() : e
                            },
                            s.encodeAB = function() {
                                try {
                                    return this.encode().toArrayBuffer()
                                } catch(e) {
                                    throw e.encoded && (e.encoded = e.encoded.toArrayBuffer()),
                                    e
                                }
                            },
                            s.toArrayBuffer = s.encodeAB,
                            s.encodeNB = function() {
                                try {
                                    return this.encode().toBuffer()
                                } catch(e) {
                                    throw e.encoded && (e.encoded = e.encoded.toBuffer()),
                                    e
                                }
                            },
                            s.toBuffer = s.encodeNB,
                            s.encode64 = function() {
                                try {
                                    return this.encode().toBase64()
                                } catch(e) {
                                    throw e.encoded && (e.encoded = e.encoded.toBase64()),
                                    e
                                }
                            },
                            s.toBase64 = s.encode64,
                            s.encodeHex = function() {
                                try {
                                    return this.encode().toHex()
                                } catch(e) {
                                    throw e.encoded && (e.encoded = e.encoded.toHex()),
                                    e
                                }
                            },
                            s.toHex = s.encodeHex,
                            s.toRaw = function(e, t) {
                                return i(this, !!e, !!t, this.$type)
                            },
                            s.encodeJSON = function() {
                                return JSON.stringify(i(this, !0, !0, this.$type))
                            },
                            o.decode = function(e, i, r) {
                                "string" == typeof i && (r = i, i = -1),
                                "string" == typeof e && (e = t.wrap(e, r ? r: "base64")),
                                e = t.isByteBuffer(e) ? e: t.wrap(e);
                                var a = e.littleEndian;
                                try {
                                    var o = n.decode(e.LE());
                                    return e.LE(a),
                                    o
                                } catch(t) {
                                    throw e.LE(a),
                                    t
                                }
                            },
                            o.decodeDelimited = function(e, i) {
                                if ("string" == typeof e && (e = t.wrap(e, i ? i: "base64")), e = t.isByteBuffer(e) ? e: t.wrap(e), e.remaining() < 1) return null;
                                var r = e.offset,
                                a = e.readVarint32();
                                if (e.remaining() < a) return e.offset = r,
                                null;
                                try {
                                    var o = n.decode(e.slice(e.offset, e.offset + a).LE());
                                    return e.offset += a,
                                    o
                                } catch(t) {
                                    throw e.offset += a,
                                    t
                                }
                            },
                            o.decode64 = function(e) {
                                return o.decode(e, "base64")
                            },
                            o.decodeHex = function(e) {
                                return o.decode(e, "hex")
                            },
                            o.decodeJSON = function(e) {
                                return new o(JSON.parse(e))
                            },
                            s.toString = function() {
                                return n.toString()
                            };
                            return Object.defineProperty && (Object.defineProperty(o, "$options", {
                                value: n.buildOpt()
                            }), Object.defineProperty(s, "$options", {
                                value: o.$options
                            }), Object.defineProperty(o, "$type", {
                                value: n
                            }), Object.defineProperty(s, "$type", {
                                value: n
                            })),
                            o
                        } (e, this);
                        this._fields = [],
                        this._fieldsById = {},
                        this._fieldsByName = {};
                        for (var r, a = 0,
                        o = this.children.length; a < o; a++) if (r = this.children[a], r instanceof v || r instanceof h || r instanceof E) {
                            if (i.hasOwnProperty(r.name)) throw Error("Illegal reflect child of " + this.toString(!0) + ": " + r.toString(!0) + " cannot override static property '" + r.name + "'");
                            i[r.name] = r.build()
                        } else if (r instanceof h.Field) r.build(),
                        this._fields.push(r),
                        this._fieldsById[r.id] = r,
                        this._fieldsByName[r.name] = r;
                        else if (! (r instanceof h.OneOf || r instanceof b)) throw Error("Illegal reflect child of " + this.toString(!0) + ": " + this.children[a].toString(!0));
                        return this.clazz = i
                    },
                    p.encode = function(e, t, n) {
                        for (var i, r, a = null,
                        o = 0,
                        s = this._fields.length; o < s; ++o) i = this._fields[o],
                        r = e[i.name],
                        i.required && null === r ? null === a && (a = i) : i.encode(n ? r: i.verifyValue(r), t, e);
                        if (null !== a) {
                            var l = Error("Missing at least one required field for " + this.toString(!0) + ": " + a);
                            throw l.encoded = t,
                            l
                        }
                        return t
                    },
                    p.calculate = function(e) {
                        for (var t, n, i = 0,
                        r = 0,
                        a = this._fields.length; r < a; ++r) {
                            if (t = this._fields[r], n = e[t.name], t.required && null === n) throw Error("Missing at least one required field for " + this.toString(!0) + ": " + t);
                            i += t.calculate(n, e)
                        }
                        return i
                    },
                    p.decode = function(t, n, i) {
                        n = "number" == typeof n ? n: -1;
                        for (var a, o, s, l, u = t.offset,
                        f = new this.clazz; t.offset < u + n || n === -1 && t.remaining() > 0;) {
                            if (a = t.readVarint32(), o = 7 & a, s = a >>> 3, o === e.WIRE_TYPES.ENDGROUP) {
                                if (s !== i) throw Error("Illegal group end indicator for " + this.toString(!0) + ": " + s + " (" + (i ? i + " expected": "not a group") + ")");
                                break
                            }
                            if (l = this._fieldsById[s]) {
                                if (l.repeated && !l.options.packed) f[l.name].push(l.decode(o, t));
                                else if (l.map) {
                                    var d = l.decode(o, t);
                                    f[l.name].set(d[0], d[1])
                                } else if (f[l.name] = l.decode(o, t), l.oneof) {
                                    var h = f[l.oneof.name];
                                    null !== h && h !== l.name && (f[h] = null),
                                    f[l.oneof.name] = l.name
                                }
                            } else switch (o) {
                            case e.WIRE_TYPES.VARINT:
                                t.readVarint32();
                                break;
                            case e.WIRE_TYPES.BITS32:
                                t.offset += 4;
                                break;
                            case e.WIRE_TYPES.BITS64:
                                t.offset += 8;
                                break;
                            case e.WIRE_TYPES.LDELIM:
                                var p = t.readVarint32();
                                t.offset += p;
                                break;
                            case e.WIRE_TYPES.STARTGROUP:
                                for (; r(s, t););
                                break;
                            default:
                                throw Error("Illegal wire type for unknown field " + s + " in " + this.toString(!0) + "#decode: " + o)
                            }
                        }
                        for (var c = 0,
                        m = this._fields.length; c < m; ++c) if (l = this._fields[c], null === f[l.name]) if ("proto3" === this.syntax) f[l.name] = l.defaultValue;
                        else {
                            if (l.required) {
                                var y = Error("Missing at least one required field for " + this.toString(!0) + ": " + l.name);
                                throw y.decoded = f,
                                y
                            }
                            e.populateDefaults && null !== l.defaultValue && (f[l.name] = l.defaultValue)
                        }
                        return f
                    },
                    a.Message = h;
                    var c = function(t, n, i, r, a, s, l, u, f, d) {
                        o.call(this, t, n, s),
                        this.className = "Message.Field",
                        this.required = "required" === i,
                        this.repeated = "repeated" === i,
                        this.map = "map" === i,
                        this.keyType = r || null,
                        this.type = a,
                        this.resolvedType = null,
                        this.id = l,
                        this.options = u || {},
                        this.defaultValue = null,
                        this.oneof = f || null,
                        this.syntax = d || "proto2",
                        this.originalName = this.name,
                        this.element = null,
                        this.keyElement = null,
                        !this.builder.options.convertFieldsToCamelCase || this instanceof h.ExtensionField || (this.name = e.Util.toCamelCase(this.name))
                    },
                    m = c.prototype = Object.create(o.prototype);
                    m.build = function() {
                        this.element = new f(this.type, this.resolvedType, !1, this.syntax),
                        this.map && (this.keyElement = new f(this.keyType, void 0, !0, this.syntax)),
                        "proto3" !== this.syntax || this.repeated || this.map ? "undefined" != typeof this.options.
                    default && (this.defaultValue = this.verifyValue(this.options.
                    default)):
                        this.defaultValue = f.defaultFieldValue(this.type)
                    },
                    m.verifyValue = function(t, n) {
                        function i(e, t) {
                            throw Error("Illegal value for " + r.toString(!0) + " of type " + r.type.name + ": " + e + " (" + t + ")")
                        }
                        n = n || !1;
                        var r = this;
                        if (null === t) return this.required && i(typeof t, "required"),
                        "proto3" === this.syntax && this.type !== e.TYPES.message && i(typeof t, "proto3 field without field presence cannot be null"),
                        null;
                        var a;
                        if (this.repeated && !n) {
                            Array.isArray(t) || (t = [t]);
                            var o = [];
                            for (a = 0; a < t.length; a++) o.push(this.element.verifyValue(t[a]));
                            return o
                        }
                        return this.map && !n ? t instanceof e.Map ? t: (t instanceof Object || i(typeof t, "expected ProtoBuf.Map or raw object for map field"), new e.Map(this, t)) : (!this.repeated && Array.isArray(t) && i(typeof t, "no array expected"), this.element.verifyValue(t))
                    },
                    m.hasWirePresence = function(t, n) {
                        if ("proto3" !== this.syntax) return null !== t;
                        if (this.oneof && n[this.oneof.name] === this.name) return ! 0;
                        switch (this.type) {
                        case e.TYPES.int32:
                        case e.TYPES.sint32:
                        case e.TYPES.sfixed32:
                        case e.TYPES.uint32:
                        case e.TYPES.fixed32:
                            return 0 !== t;
                        case e.TYPES.int64:
                        case e.TYPES.sint64:
                        case e.TYPES.sfixed64:
                        case e.TYPES.uint64:
                        case e.TYPES.fixed64:
                            return 0 !== t.low || 0 !== t.high;
                        case e.TYPES.bool:
                            return t;
                        case e.TYPES.float:
                        case e.TYPES.double:
                            return 0 !== t;
                        case e.TYPES.string:
                            return t.length > 0;
                        case e.TYPES.bytes:
                            return t.remaining() > 0;
                        case e.TYPES.enum:
                            return 0 !== t;
                        case e.TYPES.message:
                            return null !== t;
                        default:
                            return ! 0
                        }
                    },
                    m.encode = function(n, i, r) {
                        if (null === this.type || "object" != typeof this.type) throw Error("[INTERNAL] Unresolved type in " + this.toString(!0) + ": " + this.type);
                        if (null === n || this.repeated && 0 == n.length) return i;
                        try {
                            if (this.repeated) {
                                var a;
                                if (this.options.packed && e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) {
                                    i.writeVarint32(this.id << 3 | e.WIRE_TYPES.LDELIM),
                                    i.ensureCapacity(i.offset += 1);
                                    var o = i.offset;
                                    for (a = 0; a < n.length; a++) this.element.encodeValue(this.id, n[a], i);
                                    var s = i.offset - o,
                                    l = t.calculateVarint32(s);
                                    if (l > 1) {
                                        var u = i.slice(o, i.offset);
                                        o += l - 1,
                                        i.offset = o,
                                        i.append(u)
                                    }
                                    i.writeVarint32(s, o - l)
                                } else for (a = 0; a < n.length; a++) i.writeVarint32(this.id << 3 | this.type.wireType),
                                this.element.encodeValue(this.id, n[a], i)
                            } else this.map ? n.forEach(function(n, r, a) {
                                var o = t.calculateVarint32(8 | this.keyType.wireType) + this.keyElement.calculateLength(1, r) + t.calculateVarint32(16 | this.type.wireType) + this.element.calculateLength(2, n);
                                i.writeVarint32(this.id << 3 | e.WIRE_TYPES.LDELIM),
                                i.writeVarint32(o),
                                i.writeVarint32(8 | this.keyType.wireType),
                                this.keyElement.encodeValue(1, r, i),
                                i.writeVarint32(16 | this.type.wireType),
                                this.element.encodeValue(2, n, i)
                            },
                            this) : this.hasWirePresence(n, r) && (i.writeVarint32(this.id << 3 | this.type.wireType), this.element.encodeValue(this.id, n, i))
                        } catch(e) {
                            throw Error("Illegal value for " + this.toString(!0) + ": " + n + " (" + e + ")")
                        }
                        return i
                    },
                    m.calculate = function(n, i) {
                        if (n = this.verifyValue(n), null === this.type || "object" != typeof this.type) throw Error("[INTERNAL] Unresolved type in " + this.toString(!0) + ": " + this.type);
                        if (null === n || this.repeated && 0 == n.length) return 0;
                        var r = 0;
                        try {
                            if (this.repeated) {
                                var a, o;
                                if (this.options.packed && e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) {
                                    for (r += t.calculateVarint32(this.id << 3 | e.WIRE_TYPES.LDELIM), o = 0, a = 0; a < n.length; a++) o += this.element.calculateLength(this.id, n[a]);
                                    r += t.calculateVarint32(o),
                                    r += o
                                } else for (a = 0; a < n.length; a++) r += t.calculateVarint32(this.id << 3 | this.type.wireType),
                                r += this.element.calculateLength(this.id, n[a])
                            } else this.map ? n.forEach(function(n, i, a) {
                                var o = t.calculateVarint32(8 | this.keyType.wireType) + this.keyElement.calculateLength(1, i) + t.calculateVarint32(16 | this.type.wireType) + this.element.calculateLength(2, n);
                                r += t.calculateVarint32(this.id << 3 | e.WIRE_TYPES.LDELIM),
                                r += t.calculateVarint32(o),
                                r += o
                            },
                            this) : this.hasWirePresence(n, i) && (r += t.calculateVarint32(this.id << 3 | this.type.wireType), r += this.element.calculateLength(this.id, n))
                        } catch(e) {
                            throw Error("Illegal value for " + this.toString(!0) + ": " + n + " (" + e + ")")
                        }
                        return r
                    },
                    m.decode = function(t, n, i) {
                        var r, a, o = !this.map && t == this.type.wireType || !i && this.repeated && this.options.packed && t == e.WIRE_TYPES.LDELIM || this.map && t == e.WIRE_TYPES.LDELIM;
                        if (!o) throw Error("Illegal wire type for field " + this.toString(!0) + ": " + t + " (" + this.type.wireType + " expected)");
                        if (t == e.WIRE_TYPES.LDELIM && this.repeated && this.options.packed && e.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0 && !i) {
                            a = n.readVarint32(),
                            a = n.offset + a;
                            for (var s = []; n.offset < a;) s.push(this.decode(this.type.wireType, n, !0));
                            return s
                        }
                        if (this.map) {
                            var l = f.defaultFieldValue(this.keyType);
                            if (r = f.defaultFieldValue(this.type), a = n.readVarint32(), n.remaining() < a) throw Error("Illegal number of bytes for " + this.toString(!0) + ": " + a + " required but got only " + n.remaining());
                            var u = n.clone();
                            for (u.limit = u.offset + a, n.offset += a; u.remaining() > 0;) {
                                var d = u.readVarint32();
                                t = 7 & d;
                                var h = d >>> 3;
                                if (1 === h) l = this.keyElement.decode(u, t, h);
                                else {
                                    if (2 !== h) throw Error("Unexpected tag in map field key/value submessage");
                                    r = this.element.decode(u, t, h)
                                }
                            }
                            return [l, r]
                        }
                        return this.element.decode(n, t, this.id)
                    },
                    a.Message.Field = c;
                    var y = function(e, t, n, i, r, a, o) {
                        c.call(this, e, t, n, null, i, r, a, o),
                        this.extension
                    };
                    y.prototype = Object.create(c.prototype),
                    a.Message.ExtensionField = y;
                    var g = function(e, t, n) {
                        o.call(this, e, t, n),
                        this.fields = []
                    };
                    a.Message.OneOf = g;
                    var v = function(e, t, n, i, r) {
                        l.call(this, e, t, n, i, r),
                        this.className = "Enum",
                        this.object = null
                    };
                    v.getName = function(e, t) {
                        for (var n, i = Object.keys(e), r = 0; r < i.length; ++r) if (e[n = i[r]] === t) return n;
                        return null
                    };
                    var _ = v.prototype = Object.create(l.prototype);
                    _.build = function(t) {
                        if (this.object && !t) return this.object;
                        for (var n = new e.Builder.Enum,
                        i = this.getChildren(v.Value), r = 0, a = i.length; r < a; ++r) n[i[r].name] = i[r].id;
                        return Object.defineProperty && Object.defineProperty(n, "$options", {
                            value: this.buildOpt(),
                            enumerable: !1
                        }),
                        this.object = n
                    },
                    a.Enum = v;
                    var w = function(e, t, n, i) {
                        o.call(this, e, t, n),
                        this.className = "Enum.Value",
                        this.id = i
                    };
                    w.prototype = Object.create(o.prototype),
                    a.Enum.Value = w;
                    var b = function(e, t, n, i) {
                        o.call(this, e, t, n),
                        this.field = i
                    };
                    b.prototype = Object.create(o.prototype),
                    a.Extension = b;
                    var E = function(e, t, n, i) {
                        l.call(this, e, t, n, i),
                        this.className = "Service",
                        this.clazz = null
                    },
                    T = E.prototype = Object.create(l.prototype);
                    T.build = function(n) {
                        return this.clazz && !n ? this.clazz: this.clazz = function(e, n) {
                            for (var i = function(t) {
                                e.Builder.Service.call(this),
                                this.rpcImpl = t ||
                                function(e, t, n) {
                                    setTimeout(n.bind(this, Error("Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services")), 0)
                                }
                            },
                            r = i.prototype = Object.create(e.Builder.Service.prototype), a = n.getChildren(e.Reflect.Service.RPCMethod), o = 0; o < a.length; o++) !
                            function(e) {
                                r[e.name] = function(i, r) {
                                    try {
                                        try {
                                            i = e.resolvedRequestType.clazz.decode(t.wrap(i))
                                        } catch(e) {
                                            if (! (e instanceof TypeError)) throw e
                                        }
                                        if (null === i || "object" != typeof i) throw Error("Illegal arguments");
                                        i instanceof e.resolvedRequestType.clazz || (i = new e.resolvedRequestType.clazz(i)),
                                        this.rpcImpl(e.fqn(), i,
                                        function(t, i) {
                                            if (t) return void r(t);
                                            null === i && (i = "");
                                            try {
                                                i = e.resolvedResponseType.clazz.decode(i)
                                            } catch(e) {}
                                            return i && i instanceof e.resolvedResponseType.clazz ? void r(null, i) : void r(Error("Illegal response type received in service method " + n.name + "#" + e.name))
                                        })
                                    } catch(e) {
                                        setTimeout(r.bind(this, e), 0)
                                    }
                                },
                                i[e.name] = function(t, n, r) {
                                    new i(t)[e.name](n, r)
                                },
                                Object.defineProperty && (Object.defineProperty(i[e.name], "$options", {
                                    value: e.buildOpt()
                                }), Object.defineProperty(r[e.name], "$options", {
                                    value: i[e.name].$options
                                }))
                            } (a[o]);
                            return Object.defineProperty && (Object.defineProperty(i, "$options", {
                                value: n.buildOpt()
                            }), Object.defineProperty(r, "$options", {
                                value: i.$options
                            }), Object.defineProperty(i, "$type", {
                                value: n
                            }), Object.defineProperty(r, "$type", {
                                value: n
                            })),
                            i
                        } (e, this)
                    },
                    a.Service = E;
                    var S = function(e, t, n, i) {
                        o.call(this, e, t, n),
                        this.className = "Service.Method",
                        this.options = i || {}
                    },
                    I = S.prototype = Object.create(o.prototype);
                    I.buildOpt = u.buildOpt,
                    a.Service.Method = S;
                    var k = function(e, t, n, i, r, a, o, s) {
                        S.call(this, e, t, n, s),
                        this.className = "Service.RPCMethod",
                        this.requestName = i,
                        this.responseName = r,
                        this.requestStream = a,
                        this.responseStream = o,
                        this.resolvedRequestType = null,
                        this.resolvedResponseType = null
                    };
                    return k.prototype = Object.create(S.prototype),
                    a.Service.RPCMethod = k,
                    a
                } (r),
                r.Builder = function(e, t, i) {
                    function r(e) {
                        e.messages && e.messages.forEach(function(t) {
                            t.syntax = e.syntax,
                            r(t)
                        }),
                        e.enums && e.enums.forEach(function(t) {
                            t.syntax = e.syntax
                        })
                    }
                    var a = function(e) {
                        this.ns = new i.Namespace(this, null, ""),
                        this.ptr = this.ns,
                        this.resolved = !1,
                        this.result = null,
                        this.files = {},
                        this.importRoot = null,
                        this.options = e || {}
                    },
                    o = a.prototype;
                    return a.isMessage = function(e) {
                        return "string" == typeof e.name && ("undefined" == typeof e.values && "undefined" == typeof e.rpc)
                    },
                    a.isMessageField = function(e) {
                        return "string" == typeof e.rule && "string" == typeof e.name && "string" == typeof e.type && "undefined" != typeof e.id
                    },
                    a.isEnum = function(e) {
                        return "string" == typeof e.name && !("undefined" == typeof e.values || !Array.isArray(e.values) || 0 === e.values.length);
                    },
                    a.isService = function(e) {
                        return ! ("string" != typeof e.name || "object" != typeof e.rpc || !e.rpc)
                    },
                    a.isExtend = function(e) {
                        return "string" == typeof e.ref
                    },
                    o.reset = function() {
                        return this.ptr = this.ns,
                        this
                    },
                    o.define = function(e) {
                        if ("string" != typeof e || !t.TYPEREF.test(e)) throw Error("illegal namespace: " + e);
                        return e.split(".").forEach(function(e) {
                            var t = this.ptr.getChild(e);
                            null === t && this.ptr.addChild(t = new i.Namespace(this, this.ptr, e)),
                            this.ptr = t
                        },
                        this),
                        this
                    },
                    o.create = function(t) {
                        if (!t) return this;
                        if (Array.isArray(t)) {
                            if (0 === t.length) return this;
                            t = t.slice()
                        } else t = [t];
                        for (var n = [t]; n.length > 0;) {
                            if (t = n.pop(), !Array.isArray(t)) throw Error("not a valid namespace: " + JSON.stringify(t));
                            for (; t.length > 0;) {
                                var r = t.shift();
                                if (a.isMessage(r)) {
                                    var o = new i.Message(this, this.ptr, r.name, r.options, r.isGroup, r.syntax),
                                    s = {};
                                    r.oneofs && Object.keys(r.oneofs).forEach(function(e) {
                                        o.addChild(s[e] = new i.Message.OneOf(this, o, e))
                                    },
                                    this),
                                    r.fields && r.fields.forEach(function(e) {
                                        if (null !== o.getChild(0 | e.id)) throw Error("duplicate or invalid field id in " + o.name + ": " + e.id);
                                        if (e.options && "object" != typeof e.options) throw Error("illegal field options in " + o.name + "#" + e.name);
                                        var t = null;
                                        if ("string" == typeof e.oneof && !(t = s[e.oneof])) throw Error("illegal oneof in " + o.name + "#" + e.name + ": " + e.oneof);
                                        e = new i.Message.Field(this, o, e.rule, e.keytype, e.type, e.name, e.id, e.options, t, r.syntax),
                                        t && t.fields.push(e),
                                        o.addChild(e)
                                    },
                                    this);
                                    var l = [];
                                    if (r.enums && r.enums.forEach(function(e) {
                                        l.push(e)
                                    }), r.messages && r.messages.forEach(function(e) {
                                        l.push(e)
                                    }), r.services && r.services.forEach(function(e) {
                                        l.push(e)
                                    }), r.extensions && ("number" == typeof r.extensions[0] ? o.extensions = [r.extensions] : o.extensions = r.extensions), this.ptr.addChild(o), l.length > 0) {
                                        n.push(t),
                                        t = l,
                                        l = null,
                                        this.ptr = o,
                                        o = null;
                                        continue
                                    }
                                    l = null
                                } else if (a.isEnum(r)) o = new i.Enum(this, this.ptr, r.name, r.options, r.syntax),
                                r.values.forEach(function(e) {
                                    o.addChild(new i.Enum.Value(this, o, e.name, e.id))
                                },
                                this),
                                this.ptr.addChild(o);
                                else if (a.isService(r)) o = new i.Service(this, this.ptr, r.name, r.options),
                                Object.keys(r.rpc).forEach(function(e) {
                                    var t = r.rpc[e];
                                    o.addChild(new i.Service.RPCMethod(this, o, e, t.request, t.response, !!t.request_stream, !!t.response_stream, t.options))
                                },
                                this),
                                this.ptr.addChild(o);
                                else {
                                    if (!a.isExtend(r)) throw Error("not a valid definition: " + JSON.stringify(r));
                                    if (o = this.ptr.resolve(r.ref, !0)) r.fields.forEach(function(t) {
                                        if (null !== o.getChild(0 | t.id)) throw Error("duplicate extended field id in " + o.name + ": " + t.id);
                                        if (o.extensions) {
                                            var n = !1;
                                            if (o.extensions.forEach(function(e) {
                                                t.id >= e[0] && t.id <= e[1] && (n = !0)
                                            }), !n) throw Error("illegal extended field id in " + o.name + ": " + t.id + " (not within valid ranges)")
                                        }
                                        var r = t.name;
                                        this.options.convertFieldsToCamelCase && (r = e.Util.toCamelCase(r));
                                        var a = new i.Message.ExtensionField(this, o, t.rule, t.type, this.ptr.fqn() + "." + r, t.id, t.options),
                                        s = new i.Extension(this, this.ptr, t.name, a);
                                        a.extension = s,
                                        this.ptr.addChild(s),
                                        o.addChild(a)
                                    },
                                    this);
                                    else if (!/\.?google\.protobuf\./.test(r.ref)) throw Error("extended message " + r.ref + " is not defined")
                                }
                                r = null,
                                o = null
                            }
                            t = null,
                            this.ptr = this.ptr.parent
                        }
                        return this.resolved = !1,
                        this.result = null,
                        this
                    },
                    o.import = function(t, i) {
                        var a = "/";
                        if ("string" == typeof i) {
                            if (e.Util.IS_NODE && (i = n(47).resolve(i)), this.files[i] === !0) return this.reset();
                            this.files[i] = !0
                        } else if ("object" == typeof i) {
                            var o = i.root;
                            e.Util.IS_NODE && (o = n(47).resolve(o)),
                            (o.indexOf("\\") >= 0 || i.file.indexOf("\\") >= 0) && (a = "\\");
                            var s = o + a + i.file;
                            if (this.files[s] === !0) return this.reset();
                            this.files[s] = !0
                        }
                        if (t.imports && t.imports.length > 0) {
                            var l, u = !1;
                            "object" == typeof i ? (this.importRoot = i.root, u = !0, l = this.importRoot, i = i.file, (l.indexOf("\\") >= 0 || i.indexOf("\\") >= 0) && (a = "\\")) : "string" == typeof i ? this.importRoot ? l = this.importRoot: i.indexOf("/") >= 0 ? (l = i.replace(/\/[^\/]*$/, ""), "" === l && (l = "/")) : i.indexOf("\\") >= 0 ? (l = i.replace(/\\[^\\]*$/, ""), a = "\\") : l = ".": l = null;
                            for (var f = 0; f < t.imports.length; f++) if ("string" == typeof t.imports[f]) {
                                if (!l) throw Error("cannot determine import root");
                                var d = t.imports[f];
                                if ("google/protobuf/descriptor.proto" === d) continue;
                                if (d = l + a + d, this.files[d] === !0) continue;
                                /\.proto$/i.test(d) && !e.DotProto && (d = d.replace(/\.proto$/, ".json"));
                                var h = e.Util.fetch(d);
                                if (null === h) throw Error("failed to import '" + d + "' in '" + i + "': file not found");
                                /\.json$/i.test(d) ? this.import(JSON.parse(h + ""), d) : this.import(e.DotProto.Parser.parse(h), d)
                            } else i ? /\.(\w+)$/.test(i) ? this.import(t.imports[f], i.replace(/^(.+)\.(\w+)$/,
                            function(e, t, n) {
                                return t + "_import" + f + "." + n
                            })) : this.import(t.imports[f], i + "_import" + f) : this.import(t.imports[f]);
                            u && (this.importRoot = null)
                        }
                        t.package && this.define(t.package),
                        t.syntax && r(t);
                        var p = this.ptr;
                        return t.options && Object.keys(t.options).forEach(function(e) {
                            p.options[e] = t.options[e]
                        }),
                        t.messages && (this.create(t.messages), this.ptr = p),
                        t.enums && (this.create(t.enums), this.ptr = p),
                        t.services && (this.create(t.services), this.ptr = p),
                        t.extends && this.create(t.extends),
                        this.reset()
                    },
                    o.resolveAll = function() {
                        var n;
                        if (null == this.ptr || "object" == typeof this.ptr.type) return this;
                        if (this.ptr instanceof i.Namespace) this.ptr.children.forEach(function(e) {
                            this.ptr = e,
                            this.resolveAll()
                        },
                        this);
                        else if (this.ptr instanceof i.Message.Field) {
                            if (t.TYPE.test(this.ptr.type)) this.ptr.type = e.TYPES[this.ptr.type];
                            else {
                                if (!t.TYPEREF.test(this.ptr.type)) throw Error("illegal type reference in " + this.ptr.toString(!0) + ": " + this.ptr.type);
                                if (n = (this.ptr instanceof i.Message.ExtensionField ? this.ptr.extension.parent: this.ptr.parent).resolve(this.ptr.type, !0), !n) throw Error("unresolvable type reference in " + this.ptr.toString(!0) + ": " + this.ptr.type);
                                if (this.ptr.resolvedType = n, n instanceof i.Enum) {
                                    if (this.ptr.type = e.TYPES.enum, "proto3" === this.ptr.syntax && "proto3" !== n.syntax) throw Error("proto3 message cannot reference proto2 enum")
                                } else {
                                    if (! (n instanceof i.Message)) throw Error("illegal type reference in " + this.ptr.toString(!0) + ": " + this.ptr.type);
                                    this.ptr.type = n.isGroup ? e.TYPES.group: e.TYPES.message
                                }
                            }
                            if (this.ptr.map) {
                                if (!t.TYPE.test(this.ptr.keyType)) throw Error("illegal key type for map field in " + this.ptr.toString(!0) + ": " + this.ptr.keyType);
                                this.ptr.keyType = e.TYPES[this.ptr.keyType]
                            }
                        } else if (this.ptr instanceof e.Reflect.Service.Method) {
                            if (! (this.ptr instanceof e.Reflect.Service.RPCMethod)) throw Error("illegal service type in " + this.ptr.toString(!0));
                            if (n = this.ptr.parent.resolve(this.ptr.requestName, !0), !(n && n instanceof e.Reflect.Message)) throw Error("Illegal type reference in " + this.ptr.toString(!0) + ": " + this.ptr.requestName);
                            if (this.ptr.resolvedRequestType = n, n = this.ptr.parent.resolve(this.ptr.responseName, !0), !(n && n instanceof e.Reflect.Message)) throw Error("Illegal type reference in " + this.ptr.toString(!0) + ": " + this.ptr.responseName);
                            this.ptr.resolvedResponseType = n
                        } else if (! (this.ptr instanceof e.Reflect.Message.OneOf || this.ptr instanceof e.Reflect.Extension || this.ptr instanceof e.Reflect.Enum.Value)) throw Error("illegal object in namespace: " + typeof this.ptr + ": " + this.ptr);
                        return this.reset()
                    },
                    o.build = function(e) {
                        if (this.reset(), this.resolved || (this.resolveAll(), this.resolved = !0, this.result = null), null === this.result && (this.result = this.ns.build()), !e) return this.result;
                        for (var t = "string" == typeof e ? e.split(".") : e, n = this.result, i = 0; i < t.length; i++) {
                            if (!n[t[i]]) {
                                n = null;
                                break
                            }
                            n = n[t[i]]
                        }
                        return n
                    },
                    o.lookup = function(e, t) {
                        return e ? this.ns.resolve(e, t) : this.ns
                    },
                    o.toString = function() {
                        return "Builder"
                    },
                    a.Message = function() {},
                    a.Enum = function() {},
                    a.Service = function() {},
                    a
                } (r, r.Lang, r.Reflect),
                r.Map = function(e, t) {
                    function n(e) {
                        var t = 0;
                        return {
                            next: function() {
                                return t < e.length ? {
                                    done: !1,
                                    value: e[t++]
                                }: {
                                    done: !0
                                }
                            }
                        }
                    }
                    var i = function(e, n) {
                        if (!e.map) throw Error("field is not a map");
                        if (this.field = e, this.keyElem = new t.Element(e.keyType, null, !0, e.syntax), this.valueElem = new t.Element(e.type, e.resolvedType, !1, e.syntax), this.map = {},
                        Object.defineProperty(this, "size", {
                            get: function() {
                                return Object.keys(this.map).length
                            }
                        }), n) for (var i = Object.keys(n), r = 0; r < i.length; r++) {
                            var a = this.keyElem.valueFromString(i[r]),
                            o = this.valueElem.verifyValue(n[i[r]]);
                            this.map[this.keyElem.valueToString(a)] = {
                                key: a,
                                value: o
                            }
                        }
                    },
                    r = i.prototype;
                    return r.clear = function() {
                        this.map = {}
                    },
                    r.delete = function(e) {
                        var t = this.keyElem.valueToString(this.keyElem.verifyValue(e)),
                        n = t in this.map;
                        return delete this.map[t],
                        n
                    },
                    r.entries = function() {
                        for (var e, t = [], i = Object.keys(this.map), r = 0; r < i.length; r++) t.push([(e = this.map[i[r]]).key, e.value]);
                        return n(t)
                    },
                    r.keys = function() {
                        for (var e = [], t = Object.keys(this.map), i = 0; i < t.length; i++) e.push(this.map[t[i]].key);
                        return n(e)
                    },
                    r.values = function() {
                        for (var e = [], t = Object.keys(this.map), i = 0; i < t.length; i++) e.push(this.map[t[i]].value);
                        return n(e)
                    },
                    r.forEach = function(e, t) {
                        for (var n, i = Object.keys(this.map), r = 0; r < i.length; r++) e.call(t, (n = this.map[i[r]]).value, n.key, this)
                    },
                    r.set = function(e, t) {
                        var n = this.keyElem.verifyValue(e),
                        i = this.valueElem.verifyValue(t);
                        return this.map[this.keyElem.valueToString(n)] = {
                            key: n,
                            value: i
                        },
                        this
                    },
                    r.get = function(e) {
                        var t = this.keyElem.valueToString(this.keyElem.verifyValue(e));
                        if (t in this.map) return this.map[t].value
                    },
                    r.has = function(e) {
                        var t = this.keyElem.valueToString(this.keyElem.verifyValue(e));
                        return t in this.map
                    },
                    i
                } (r, r.Reflect),
                r.newBuilder = function(e) {
                    return e = e || {},
                    "undefined" == typeof e.convertFieldsToCamelCase && (e.convertFieldsToCamelCase = r.convertFieldsToCamelCase),
                    "undefined" == typeof e.populateAccessors && (e.populateAccessors = r.populateAccessors),
                    new r.Builder(e)
                },
                r.loadJson = function(e, t, n) {
                    return ("string" == typeof t || t && "string" == typeof t.file && "string" == typeof t.root) && (n = t, t = null),
                    t && "object" == typeof t || (t = r.newBuilder()),
                    "string" == typeof e && (e = JSON.parse(e)),
                    t.import(e, n),
                    t.resolveAll(),
                    t
                },
                r.loadJsonFile = function(e, t, n) {
                    if (t && "object" == typeof t ? (n = t, t = null) : t && "function" == typeof t || (t = null), t) return r.Util.fetch("string" == typeof e ? e: e.root + "/" + e.file,
                    function(i) {
                        if (null === i) return void t(Error("Failed to fetch file"));
                        try {
                            t(null, r.loadJson(JSON.parse(i), n, e))
                        } catch(e) {
                            t(e)
                        }
                    });
                    var i = r.Util.fetch("object" == typeof e ? e.root + "/" + e.file: e);
                    return null === i ? null: r.loadJson(JSON.parse(i), n, e)
                },
                r
            })
        }).call(t, n(46), n(26)(e))
    },
    function(e, t) {
        function n(e, t) {
            function n() {
                o = 0,
                s = +new Date,
                a = e.apply(i, r),
                i = null,
                r = null
            }
            var i, r, a, o, s = 0;
            return function() {
                i = this,
                r = arguments;
                var e = new Date - s;
                return o || (e >= t ? n() : o = setTimeout(n, t - e)),
                a
            }
        }
        e.exports = n
    },
    function(e, t) { (function(t) {
            var n, i = t.crypto || t.msCrypto;
            if (i && i.getRandomValues) {
                var r = new Uint8Array(16);
                n = function() {
                    return i.getRandomValues(r),
                    r
                }
            }
            if (!n) {
                var a = new Array(16);
                n = function() {
                    for (var e, t = 0; t < 16; t++) 0 === (3 & t) && (e = 4294967296 * Math.random()),
                    a[t] = e >>> ((3 & t) << 3) & 255;
                    return a
                }
            }
            e.exports = n
        }).call(t,
        function() {
            return this
        } ())
    },
    function(e, t, n) {
        function i(e, t, n) {
            var i = t && n || 0,
            r = 0;
            for (t = t || [], e.toLowerCase().replace(/[0-9a-f]{2}/g,
            function(e) {
                r < 16 && (t[i + r++] = u[e])
            }); r < 16;) t[i + r++] = 0;
            return t
        }
        function r(e, t) {
            var n = t || 0,
            i = l;
            return i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]]
        }
        function a(e, t, n) {
            var i = t && n || 0,
            a = t || [];
            e = e || {};
            var o = void 0 !== e.clockseq ? e.clockseq: p,
            s = void 0 !== e.msecs ? e.msecs: (new Date).getTime(),
            l = void 0 !== e.nsecs ? e.nsecs: m + 1,
            u = s - c + (l - m) / 1e4;
            if (u < 0 && void 0 === e.clockseq && (o = o + 1 & 16383), (u < 0 || s > c) && void 0 === e.nsecs && (l = 0), l >= 1e4) throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
            c = s,
            m = l,
            p = o,
            s += 122192928e5;
            var f = (1e4 * (268435455 & s) + l) % 4294967296;
            a[i++] = f >>> 24 & 255,
            a[i++] = f >>> 16 & 255,
            a[i++] = f >>> 8 & 255,
            a[i++] = 255 & f;
            var d = s / 4294967296 * 1e4 & 268435455;
            a[i++] = d >>> 8 & 255,
            a[i++] = 255 & d,
            a[i++] = d >>> 24 & 15 | 16,
            a[i++] = d >>> 16 & 255,
            a[i++] = o >>> 8 | 128,
            a[i++] = 255 & o;
            for (var y = e.node || h,
            g = 0; g < 6; g++) a[i + g] = y[g];
            return t ? t: r(a)
        }
        function o(e, t, n) {
            var i = t && n || 0;
            "string" == typeof e && (t = "binary" == e ? new Array(16) : null, e = null),
            e = e || {};
            var a = e.random || (e.rng || s)();
            if (a[6] = 15 & a[6] | 64, a[8] = 63 & a[8] | 128, t) for (var o = 0; o < 16; o++) t[i + o] = a[o];
            return t || r(a)
        }
        for (var s = n(117), l = [], u = {},
        f = 0; f < 256; f++) l[f] = (f + 256).toString(16).substr(1),
        u[l[f]] = f;
        var d = s(),
        h = [1 | d[0], d[1], d[2], d[3], d[4], d[5]],
        p = 16383 & (d[6] << 8 | d[7]),
        c = 0,
        m = 0,
        y = o;
        y.v1 = a,
        y.v4 = o,
        y.parse = i,
        y.unparse = r,
        e.exports = y
    },
    function(e, t) {}])
});